2.剛開始 想這個還不簡單嗎? 面向百度程式設計: 開啟百度=> 輸入標題=> 然後看了同行的各種操作。。。。一頓操作猛如虎,一看戰績0:5,我絕望了。尼瑪 取消的我所有請求都發不出去了。
3 直到我看到一個人的連結github.com/axios/axios…。感謝 Chobits 同學。開啟一看感覺好熟悉,那就看看吧。我靠 這不是axios github地址嗎? 然後看了官網例項,醍醐灌頂。。。我走了多少彎路。所以推薦以後還是 官方文件作為第一選項。
4.下面說說下實現思路:
第一步: axios 怎麼取消:
const CancelToken = axios.CancelToken;
let cancel;
axios.get('/user/12345', {
cancelToken: new CancelToken(function executor(c) {
// An executor function receives a cancel function as a parameter
cancel = c;
})
});
// cancel the requestcancel();
cancel()複製程式碼
第二步: 這是取消一個axios 如果是多個呢?那麼我們就需要有個地方給存下來。我本來打算用vuex 但是我這是小專案,本來就沒用vuex,所以就直接建立個檔案store.js
let store = {_axiosPromiseCancel: [] };
export default store;複製程式碼
第三步: axios 攔截器axios.js( 簡化版)
import store from './store';
const CancelToken = axios.CancelToken;
axios.interceptors.request.use(config=>{
// 這個是 取消重點
config.cancelToken = new CancelToken((cancel) => {
store._axiosPromiseCancel.push(cancel);
});
return config;
});
axios.interceptors.response.use(res=>{
// do something...
},error=>{
if (axios.isCancel(error)) {
// 為了終結promise鏈 就是實際請求 不會走到.catch(rej=>{});這樣就不會觸發錯誤提示之類了。
return new Promise(() => {});
}else{
return Promise.reject(error)
}});複製程式碼
第四步: 就是在router 裡做取消動作了 router.js
import store from './store';
router.beforeEach((to, from, next) => {
store._axiosPromiseCancel.forEach(e=>{
e && e()
});
store._axiosPromiseCancel = [];
})複製程式碼
好了,程式碼我們搞定了。那麼我們看看效果
可以看到 我們多麼渴望的 cancel 出現了。控制檯只列印了 cancel資訊 而沒有 列印出.catch 裡面的資訊。說明 promise鏈也終止了。
之前有個關於前後端快取的問題,我也是花半天時間解決了,但是沒有記錄。都忘記怎麼解決了。 現在把這個記下來,當個筆記吧。
總結: 有不對之處 還請大佬們多指正。