最新国产好看的视频,伊人天堂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)
}

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

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

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

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

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

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

這里有 2 個知識點:

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

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

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

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

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

總結(jié)

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

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

到此這篇關于axios實現(xiàn)取消請求的方法詳解的文章就介紹到這了,更多相關axios取消請求內(nèi)容請搜索腳本之家以前的文章或繼續(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)化和安全保護,但過度使用會導致可讀性急劇下降,建議調(diào)試時使用sourcemap反向映射,或通過AST分析工具還原代碼結(jié)構
    2025-08-08
  • 純js代碼生成可搜索選擇下拉列表的實例

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

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

    electron版本升級的簡單步驟

    Electron是一款流行的跨平臺框架,用于構建桌面應用程序,它基于Web技術棧,結(jié)合了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日期格式轉(zhuǎn)換為標準日期格式實現(xiàn)思路

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

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

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

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

最新評論

施秉县| 鄱阳县| 临潭县| 保靖县| 达拉特旗| 英超| 杨浦区| 四会市| 清镇市| 报价| 会宁县| 张北县| 林口县| 手机| 聂荣县| 莫力| 景谷| 高阳县| 柳河县| 炉霍县| 临泉县| 宁安市| 密云县| 山阴县| 泸水县| 兴山县| 弋阳县| 泾川县| 资阳市| 张家界市| 巢湖市| 马山县| 营山县| 历史| 涞水县| 定边县| 仙游县| 伊金霍洛旗| 和田县| 海丰县| 宁波市|