iT邦幫忙

4

關於axios強制中斷請求(請教眾大大)

  • 分享至 

  • xImage

來源在此

就是看了網路上大大的方法去中斷請求,也有效。

但問題來了我不清楚這兩段,為什麼這樣帶入就知道要刪除的是這個API而不是其他API?

 this.source = this.axios.CancelToken.source();
cancel() {
      this.source.cancel('这里你可以输出一些信息,可以在catch中拿到')
    }

謝謝各位大大點進來看

froce iT邦大師 1 級 ‧ 2020-03-04 13:28:19 檢舉
http://www.qiutianaimeili.com/html/page/2019/03/8grudzwvfmq.html
去看源碼
好 謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
ShawnL
iT邦新手 1 級 ‧ 2020-03-04 15:57:07
最佳解答

根據 https://blog.csdn.net/sir1241/article/details/76099529 範例所示:

首先該範例在 Vue 實體中的 source ,初始化了 source 物件,而這個 source 物件包含了 token 以及 cancel 屬性:

this.source = this.axios.CancelToken.source(); // 这里初始化source对象

token 屬性在 axios 原始碼當中最終會調用 CancelToken 構造函式,並記錄了 promise 的請求:

function CancelToken (executor){
    // ...
    var resolvePromise;
    this.promise = new Promise(function(resolve){
        resolvePromise = resolve;
    })
    var token = this; // 這裡
    executor(function cancel(message){
        if(token.reason){
            return;
        }
        token.reason = new Cancel(message);
        resolvePromise(token.reason);
    })
}

後續主要就是依靠 source 內指向的 promise 並藉由 cancel 方法來操控該 promise 的狀態。

TL;DR

簡單的來說,axios 會去觀察 token.promise,如果在發送 request 前,該狀態就已經改變了,他就會去取消 呼叫這個方法的請求

至於將你提供的範例 source 物件初始化在 this.source 只是 Vue.js 中 MVVM 的思維,目的是將 source 物件的位置指向同一處。

有誤的話煩請其他大神指正了,感溫。

謝大師... 有時間再回來看 最近案子太多每天都加班到9點 六日也必須上班XD 已經12天沒休假了 先謝謝大師

1
dragonH
iT邦超人 5 級 ‧ 2020-03-04 12:51:38

官方說的

參考

/images/emoticon/emoticon02.gif

我要發表回答

立即登入回答