最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

axios實現(xiàn)取消請求的方法詳解

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

本文我們討論的問題是——axios 是如何實現(xiàn)取消請求(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)一了取消類操作的實現(xiàn),在瀏覽器端已經(jīng)受到廣泛支持了。

取消請求的實現(xiàn)

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

// /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 時,先前就已經(jīng)調用了 controller.abort(),這樣 abort 事件永遠都不會觸發(fā)了。

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

onCanceled 處理函數(shù)內容如下。

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

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

這里有 2 個知識點:

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

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

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

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

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

總結

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

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

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

相關文章

  • JavaScript 中如何實現(xiàn)并發(fā)控制

    JavaScript 中如何實現(xiàn)并發(fā)控制

    在日常開發(fā)過程中,你可能會遇到并發(fā)控制的場景,比如控制請求并發(fā)數(shù)。那么在 JavaScript 中如何實現(xiàn)并發(fā)控制呢?在回答這個問題之前,我們來簡單介紹一下并發(fā)控制。
    2021-05-05
  • 使用JS監(jiān)聽鍵盤按下事件(keydown event)

    使用JS監(jiān)聽鍵盤按下事件(keydown event)

    這篇文章主要介紹了使用JS監(jiān)聽鍵盤按下事件(keydown event),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • JavaScript 學習 - 提高篇

    JavaScript 學習 - 提高篇

    JavaScript 學習 - 提高篇...
    2007-02-02
  • Webpack優(yōu)化配置縮小文件搜索范圍

    Webpack優(yōu)化配置縮小文件搜索范圍

    這篇文章主要介紹了Webpack優(yōu)化-縮小文件搜索范圍的相關知識,文中較詳細的給大家介紹了可以優(yōu)化的途徑,需要的朋友可以參考下
    2017-12-12
  • JavaScript插件為什么看不懂,使用了什么技術?(示例講解)

    JavaScript插件為什么看不懂,使用了什么技術?(示例講解)

    JavaScript插件難以理解通常由以下技術原因造成:設計模式密集化、壓縮混淆技術?、異步控制迷宮、元編程技巧、依賴管理黑盒,這些技術本用于代碼優(yōu)化和安全保護,但過度使用會導致可讀性急劇下降,建議調試時使用sourcemap反向映射,或通過AST分析工具還原代碼結構
    2025-08-08
  • 純js代碼生成可搜索選擇下拉列表的實例

    純js代碼生成可搜索選擇下拉列表的實例

    下面小編就為大家分享一篇純js代碼生成可搜索選擇下拉列表的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • electron版本升級的簡單步驟

    electron版本升級的簡單步驟

    Electron是一款流行的跨平臺框架,用于構建桌面應用程序,它基于Web技術棧,結合了Chromium和Node.js,可以使用HTML、CSS和JavaScript開發(fā)跨平臺的應用程序,本文將介紹electron版本升級的簡單步驟,并提供相應的源代碼示例,需要的朋友可以參考下
    2024-05-05
  • 微信小程序用swiper實現(xiàn)滑動刻度尺

    微信小程序用swiper實現(xiàn)滑動刻度尺

    這篇文章主要為大家詳細介紹了微信小程序用swiper實現(xiàn)滑動刻度尺,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • js將long日期格式轉換為標準日期格式實現(xiàn)思路

    js將long日期格式轉換為標準日期格式實現(xiàn)思路

    本文為大家詳細介紹下js將long日期格式轉換為標準日期格式,感興趣的朋友可以參考下哈,希望可以幫助到你
    2013-04-04
  • 使用TypeScript實現(xiàn)一個類型安全的EventBus示例詳解

    使用TypeScript實現(xiàn)一個類型安全的EventBus示例詳解

    EventBus是工作中常用的工具,本文用Typescript實現(xiàn)一個具備基礎功能且類型安全的EventBus,是我近期學習Typescript的知識總結,對TypeScript實現(xiàn)EventBus相關知識感興趣的朋友一起看看吧
    2022-06-06

最新評論

朝阳市| 揭东县| 信阳市| 宝鸡市| 拉萨市| 资中县| 大安市| 涟源市| 林州市| 桐柏县| 桦川县| 油尖旺区| 宜良县| 天峻县| 肥乡县| 涟源市| 方正县| 拉萨市| 贡嘎县| 长乐市| 吴川市| 哈巴河县| 元朗区| 涪陵区| 清苑县| 奈曼旗| 石河子市| 新化县| 白山市| 招远市| 东平县| 凌云县| 鹤壁市| 奇台县| 乌恰县| 得荣县| 南岸区| 定边县| 万州区| 七台河市| 海兴县|