鍍金池/ 問答/HTML/ vue 中多個并發(fā)請求當一個請求檢測到需要登錄時,取消其它請求并在登錄完成后重新

vue 中多個并發(fā)請求當一個請求檢測到需要登錄時,取消其它請求并在登錄完成后重新發(fā)起

這個項目是在微信中基于微信的靜默登錄,也就是不需要多余用戶登錄填寫,只需要跳轉重新加載一遍頁面就完成登錄了,之前是用攔截器做的檢測到未登錄的代碼就直接跳轉實現(xiàn)自動登錄再返回原來頁面,但是同一個頁面該發(fā)起的請求還是同時發(fā)起了。

現(xiàn)在我想實現(xiàn)的是

//同時發(fā)起5個請求
axios1()//假如第一個請求拿到數(shù)據(jù)檢測到未登錄的話就取消掉后邊的幾個請求
axios2()
axios3()
axios4()
axios5()

有什么比較好的思路或者實現(xiàn)方式么?

回答
編輯回答
青裙

http是無狀態(tài)請求,請求無法被取消。非要用異步實現(xiàn)的這個功能是不可能的,但是你可以取消回調函數(shù)的執(zhí)行。

2018年4月15日 14:10
編輯回答
裸橙

你可以使用axios.all(),雖然不會取消其他請求,但是只要有一個借口異常,所有接口就不會走正常的回調函數(shù),這樣也不會影響業(yè)務操作

2018年9月5日 16:46
編輯回答
柒喵

你可以參考我這篇筆記,思路是一樣的,將所有的請求放到一個數(shù)組里,然后有一個請求去請求登陸的,待其請求完成后再發(fā)起數(shù)組里其他的請求
http://segmentfault.com/n/133...

2017年12月30日 00:43
編輯回答
選擇

你可以在axios請求的時候做攔截

2017年11月22日 14:51
編輯回答
凝雅

你可以等到一個請求完之后在決定是否要發(fā)起后續(xù)的請求

2018年9月22日 00:27
編輯回答
艷骨

如果是后端渲染的話。直接可以判斷是否登錄了吧。
把ajax放到一個只執(zhí)行一次的user_login的事件監(jiān)聽里。
頁面未登錄登錄一下觸發(fā)user_login事件
頁面登錄的話直接觸發(fā)事件

2017年6月14日 10:30
編輯回答
櫻花霓

這樣行嗎?

axios1().then(res=>{
        if(!res.login){
        //go login
        }else{
        axios2()
        axios3()
        axios4()
        axios5()
        }
})
2017年2月4日 16:27
編輯回答
哎呦喂

通過cancelToken可以取消get類型請求,但是其他類型的請求無法通過cancelToken取消

2017年11月28日 20:12
編輯回答
單眼皮

首先包裝一下每一個 promise ,即使失敗也至為 resolve 狀態(tài),然后用 Promise.race 確保一個完成后記錄下 index 或者 id,然后重新發(fā)這個 array 里面的其他請求。

request 的 abort 不知道兼容性如何,這種方法是所有請求都必須發(fā)完全,并且除了成功的那個其他都會發(fā)兩遍。

2018年1月17日 06:25
編輯回答
尛曖昧

首先,你要復寫 axios 方法(不推薦)或者自己封裝一個方面(推薦),然后:

  1. 接到任何請求,都直接加入隊列
  2. 判斷是否已登錄,如是,則正常發(fā)送請求
  3. 如果不是,則跳轉到登錄頁登錄
  4. 登錄完成后,檢查隊列,如果有請求,就發(fā)送
2018年3月4日 16:43