问:现有情况为:http://api.test.com/test.php?cf=经常访问失败,经与服务端协商,服务端又提供了两个备用IP分别为:111.***.***.***和106.**.***.***,请您写出可以让http://api.test.com/test.php?cf=访问成功概率增加的前端程序;哎,没思路,没做出来~
2 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
我会这么做:
用一个数组保存三个请求地址,用一个变量保存实际可用地址,默认值为最常用的那个。
当发生第一次请求的时候,使用 Promise 并行发起三个请求,谁先返回用谁,并把成功的请求地址赋给上面说的变量。此后的请求就只需要使用一个地址便可
这个过程应该单独封装起来以备后续还需要检查。
原生的 Promise 需要改造来应对并行请求的 race condition,若条件允许,会直接使用第三方库如 bluebird 或 RSVP 等等。
重点是必须并行请求,然后利用竟态来阻断后发生的两个请求,也就是当数组中的一个 Promise 被 resolve 之后,剩下的就不再管它了。传统的回调方式你需要在回调内部判断可用地址变量是否已存在然后决定是否跳过后续逻辑,但请求本身都是完成的;又及你无法事先知道哪个接口会失败,所以你还得逐个处理 errors;所以我用带竟态控制的 Promise,原因就是以上。
但我还是觉得一定要在前端做吗?这个明显去弄个反向代理更合理。
添加回答
举报
0/150
提交
取消