本篇文章主要為大家講述的就是關(guān)于JavaScript 實現(xiàn)異步請求就靠瀏覽器提供的兩個 API —— XMLHttpRequest 和 Fetch。在日常中用多的比較多的就是Promise 請求庫 axios,它基于 XMLHttpRequest。
現(xiàn)在我們就來講講呱 XMLHttpRequest、Fetch 和 axios 究竟是如何“取消請求”。
先說下,取消 XMLHttpRequest 請求
下面可以看到請求已經(jīng)發(fā)送了,可以使用 XMLHttpRequest.abort() 方法取消發(fā)送,代碼示例如下:
const xhr = new XMLHttpRequest(); xhr.open('GET', '<http://127.0.0.1:3000/api/get>', true); xhr.send(); setTimeout(() => { xhr.abort(); }, 1000);
再來說下取消請求,readyState會變成XMLHttpRequest.UNSENT(0);請求的 xhr.status會被設(shè)為 0 ;
現(xiàn)就就一起看 Chrome DevTools Network 中,看看正常請求和取消請求的對比圖:
取消 Fetch 請求
取消 Fetch 請求,需要用到AbortControllerAPI。我們可以構(gòu)造一個 controller 實例:const controller = new AbortController(), controller 它有一個只讀屬性AbortController.signal,可以作為參數(shù)傳入到 fetch 中,用于將控制器與獲取請求相關(guān)聯(lián);
代碼示例如下:
const controller = new AbortController(); void (async function () { const response = await fetch('<http://127.0.0.1:3000/api/get>', { signal: controller.signal, }); const data = await response.json(); })(); setTimeout(() => { controller.abort(); }, 1000);
瀏覽器控制臺對比圖:
我們其實可以在 controller.abort() 傳入“取消請求的原因”參數(shù),然后進行 try...catch 捕獲
取消 aixos 請求
axios 同樣支持AbortController
const controller = new AbortController(); const API_URL = '<http://127.0.0.1:3000/api/get>'; void (async function () { const response = await axios.get(API_URL, { signal: controller.signal, }); const { data } = response; })(); setTimeout(() => { controller.abort(); }, 1000);
控制臺截圖:
錯誤捕獲:
注意:axios 之前用于取消請求的 CancelToken 方法已經(jīng)被棄用,更多請見文檔axios-http.com/docs/cancel…;
本篇內(nèi)容到此講述完畢,請大家關(guān)注后續(xù)更多精彩內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/130344.html
摘要:春招季如何橫掃面試核心考點基礎(chǔ)版前端面試之路二基礎(chǔ)整理的繼承和的繼承有什么區(qū)別的繼承時通過或構(gòu)造函數(shù)機制來實現(xiàn)。作用創(chuàng)建私有變量,減少全局變量,防止變量名污染。異步瀏覽器訪問服務(wù)器請求,用戶正常操作,瀏覽器后端進行請求。 春招季如何橫掃 Javascript 面試核心考點(基礎(chǔ)版)?前端面試之路二(javaScript基礎(chǔ)整理) ES5的繼承和ES6的繼承有什么區(qū)別 ES5的繼承時通過...
摘要:事件對象是與特定事件相關(guān)切包含有關(guān)該事件詳細(xì)信息的對象。事件傳播是瀏覽器決定哪個對象觸發(fā)其事件處理程序的過程。事件傳播有兩種方式事件冒泡和事件捕獲。 javascript的typeof返回哪些數(shù)據(jù)類型 object number function boolean undefined string 數(shù)組方法pop() push() unshift() shift() Pu...
摘要:面試題的基本數(shù)據(jù)類型和引用數(shù)據(jù)類型基本數(shù)據(jù)類型引用數(shù)據(jù)類型和有何區(qū)別表示一個對象被定義了,值為空值表示不存在這個值。 js面試題 JS的基本數(shù)據(jù)類型和引用數(shù)據(jù)類型 基本數(shù)據(jù)類型:undefined、null、boolean、number、string、symbol引用數(shù)據(jù)類型:object、array、function null 和 undefined 有何區(qū)別? null 表示一個對...
摘要:引用計數(shù)這是最簡單的垃圾收集算法。然而,引用計數(shù)算法考慮到它們互相都有至少一次引用,所以它們不會被回收。事件代理發(fā)生在冒泡階段。為時取消事件默認(rèn)行為,為時取消時間傳播通常利用事件冒泡機制托管事件處理程序提高程序性能。 JS延遲加載的方式有哪些? JS的延遲加載有助與提高頁面的加載速度。defer和async、動態(tài)創(chuàng)建DOM方式(用得最多)、按需異步載入JSdefer:延遲腳本。立即下載...
摘要:發(fā)布者的狀態(tài)發(fā)生變化時就會通知所有的訂閱者,使得它們能夠自動更新自己。觀察者模式的中心思想就是促進松散耦合,一為時間上的解耦,二為對象之間的解耦。參考設(shè)計模式與開發(fā)實踐第章發(fā)布訂閱模式設(shè)計模式第章第節(jié)觀察者模式 概述 觀察者模式又叫發(fā)布 - 訂閱模式(Publish/Subscribe),它定義了一種一對多的關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個目標(biāo)對象(為了方便理解,以下將觀察者對象叫...
閱讀 561·2023-03-27 18:33
閱讀 748·2023-03-26 17:27
閱讀 645·2023-03-26 17:14
閱讀 602·2023-03-17 21:13
閱讀 536·2023-03-17 08:28
閱讀 1821·2023-02-27 22:32
閱讀 1314·2023-02-27 22:27
閱讀 2198·2023-01-20 08:28