欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

axios實現取消請求的方法詳解

 更新時間:2024年04月21日 08:28:28   作者:zhangbao90s  
axios 是現在前端項目中最常使用的一個請求庫,目前 Github star 已經達到了 104k star,本文我們討論的問題是axios 是如何實現取消請求(Cancel requests)的,文中有詳細的實現方法,感興趣的朋友可以參考下

本文我們討論的問題是——axios 是如何實現取消請求(Cancel requests)的?

在 axios 中取消請求

axios 是這樣取消請求的。

const controller = new AbortController();

axios.get('https://httpstat.us/200', {
  signal: controller.signal
}).catch(error => {
  // 2) 在 catch 中捕獲錯誤
  console.log(error) // { message: 'canceled', name: 'CanceledError', code: 'ERR_CANCELED' }
});
// 1) 取消請求
controller.abort()

AbortController 是在 DOM 標準中定義的 API,統(tǒng)一了取消類操作的實現,在瀏覽器端已經受到廣泛支持了。

取消請求的實現

取消請求的實現位于 lib/adapters/xhr.js(暫不考慮 Node.js 實現)。

// /v1.6.8/lib/adapters/xhr.js#L244
if (config.signal) {
  config.signal.aborted
    ? onCanceled() :
    config.signal.addEventListener('abort', onCanceled)
}

內部會判斷是否傳入了 signal 配置項。如果傳入了,就監(jiān)聽 controller.signal 上的 abort 事件,這個事件會在調用 controller.abort() 方法時觸發(fā)。

不過,還有一種可能是傳入 controller.signal 時,先前就已經調用了 controller.abort(),這樣 abort 事件永遠都不會觸發(fā)了。

不過沒有關系,調用了 controller.abort() 后,controller.signal.aborted 屬性會置為 true,因此可以通過 aborted 屬性,確保 onCanceled 回調函數始終被調用。

onCanceled 處理函數內容如下。

// /v1.6.8/lib/adapters/xhr.js#L234
onCanceled = cancel => {
  reject(!cancel || cancel.type
    ? new CanceledError(null, config, request) 
    : cancel
  );
  request.abort();
};

調用 controller.abort() 后,處理函數 onCanceled 會接受一個 cancel Event 參數,結構類似 { type: 'abort' } 這樣,然后就會返回 axios 自定義的 CanceledError 錯誤。

這里有 2 個知識點:

  • axios 對接口請求過程使用 new Promise((resolve,reject)){...} 進行了封裝,確保始終返回 Promise 對象,這里的 reject(...) 表示“請求以失敗告終”
  • 至于 reject(cancel) 的分支邏輯,是為了兼容 CancelToken 的寫法,這是舊的取消請求的實現,不過現在已經棄用了,新項目中不要再用了

最后,調用 request.abort(),這是實際終止當前請求的地方。

request 就是 XMLHttpRequest 實例,abort() 是 XMLHttpRequest 天然支持的用于終止請求的方法。

// /v1.6.8/lib/adapters/xhr.js#L76
let request = new XMLHttpRequest();

到此,我們就完成了 axios 取消請求的實現介紹。你是否看懂了呢?

總結

取消請求是 axios 提供的核心功能之一,本文我們介紹了它在瀏覽器端的實現。

axios 在瀏覽器端是使用 XMLHttpRequest API 提供請求能力的,其實例上提供了 abort() 方法用于終止請求,而 axios 就是利用這一點跟 AbortController API 配合實現請求的取消的。

到此這篇關于axios實現取消請求的方法詳解的文章就介紹到這了,更多相關axios取消請求內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js面向對象封裝級聯下拉菜單列表的實現步驟

    js面向對象封裝級聯下拉菜單列表的實現步驟

    這篇文章主要介紹了js面向對象封裝級聯下拉菜單列表的實現步驟,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2021-02-02
  • jquery實現左右滑動式輪播圖

    jquery實現左右滑動式輪播圖

    這篇文章主要為大家詳細介紹了jquery實現左右滑動式輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JS實現點擊鏈接取消跳轉效果的方法

    JS實現點擊鏈接取消跳轉效果的方法

    有時候我們僅僅希望將鏈接<a>作為一個按鈕使用,但是在默認狀態(tài)下,點擊鏈接會出現跳轉效果,下面就通過代碼實例,介紹一下如何實現此效果
    2014-01-01
  • 小程序實現計時器功能

    小程序實現計時器功能

    這篇文章主要為大家詳細介紹了小程序實現計時器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript實現帶粒子效果的進度條

    JavaScript實現帶粒子效果的進度條

    這篇文章主要為大家詳細介紹了JavaScript實現帶粒子效果的進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 小程序實現層疊卡片滑動效果

    小程序實現層疊卡片滑動效果

    這篇文章主要為大家詳細介紹了小程序實現層疊卡片滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 統(tǒng)一接口:為FireFox添加IE的方法和屬性的js代碼

    統(tǒng)一接口:為FireFox添加IE的方法和屬性的js代碼

    統(tǒng)一接口:為FireFox添加IE的方法和屬性的js代碼...
    2007-03-03
  • JavaScript使用Base64編碼和Blob對象加密圖像url地址

    JavaScript使用Base64編碼和Blob對象加密圖像url地址

    有時候會看到一些網站的圖片src中是blob:http://example.com/7c672acb-375c-4a26-9af9-99cb4c77f04d,這樣的圖片加載怎么實現呢?本文講解在瀏覽器中JavaScript使用解析Base64編碼和Blob對象技術來實現,下面是實現的步驟和相應的示例代碼,
    2023-12-12
  • JS設置自定義快捷鍵并實現圖片上下左右移動

    JS設置自定義快捷鍵并實現圖片上下左右移動

    這篇文章主要介紹了JS設置自定義快捷鍵并實現圖片上下左右移動,文中通過使用自定義熱鍵或者使用鍵盤上下左右鍵移動圖片,以此來實現此功能,需要的朋友可以參考下
    2019-10-10
  • Bootstrap實現翻頁效果

    Bootstrap實現翻頁效果

    這篇文章主要為大家詳細介紹了Bootstrap實現翻頁效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論