JavaScript取消請求方法
引言
眾所周知,JavaScript 實現異步請求就靠瀏覽器提供的兩個 API —— XMLHttpRequest 和 Fetch。我們平常用的較多的是 Promise 請求庫 axios,它基於 XMLHttpRequest。
本篇帶來 XMLHttpRequest、Fetch 和 axios 分別是怎樣“取消請求”的。
閑話少說,沖就完事瞭~
取消 XMLHttpRequest 請求
當請求已經發送瞭,可以使用 XMLHttpRequest.abort() 方法取消發送,代碼示例如下:
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 會被設為 0 ;
不如在 Chrome DevTools Network 中,看看正常請求和取消請求的對比圖:
取消 Fetch 請求
取消 Fetch 請求,需要用到 AbortController API。我們可以構造一個 controller 實例:const controller = new AbortController()
, controller 它有一個隻讀屬性 AbortController.signal,可以作為參數傳入到 fetch 中,用於將控制器與獲取請求相關聯;
代碼示例如下:
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() 傳入“取消請求的原因”參數,然後進行 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 方法已經被棄用,更多請見文檔 axios-http.com/docs/cancel…;
以上就是JavaScript取消請求方法的詳細內容,更多關於JavaScript取消請求的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- JavaScript前端超時異步操作完美解決過程
- 一篇文章讓你看懂封裝Axios
- Javascript讀取json文件方法實例總結
- 取消正在運行的Promise技巧詳解
- JavaScript 中斷請求幾種方案詳解