問:現有情況為: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
提交
取消