精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:如何中斷已發出去的請求?

開發 前端
Fetch 是 Web 提供的一個用于獲取資源的接口,如果要終止 fetch 請求,則可以使用 Web 提供的 AbortController 接口。

 面試官:請求已經發出去了,如何取消掉這個已經發出去的請求?

面試者:(腦海里立馬產生一個疑惑:已經發出去的請求還能取消掉?) 這個......這個......還真不知道。

面試完,馬上找度娘.....

推薦閱讀:axios解析之cancelToken取消請求原理[2]

AbortController

AbortController[3] 接口表示一個控制器對象,可以根據需要終止一個或多個Web請求。

  •  AbortController():AbortController()構造函數創建一個新的 AbortController 對象實例
  •  signal:signal 屬性返回一個 AbortSignal 對象實例,它可以用來 with/about 一個Web(網絡)請求
  •  abort():終止一個尚未完成的Web(網絡)請求,它能夠終止 fetch 請求,任何響應Body的消費者和流

Fetch 中斷請求

Fetch 是 Web 提供的一個用于獲取資源的接口,如果要終止 fetch 請求,則可以使用 Web 提供的 AbortController 接口。

首先我們使用 AbortController() 構造函數創建一個控制器,然后使用 AbortController.signal 屬性獲取其關聯 AbortSignal 對象的引用。當一個 fetch request 初始化時,我們把 AbortSignal 作為一個選項傳遞到請求對象 (如下:{signal}) 。這將信號和控制器與獲取請求相關聯,然后允許我們通過調用 AbortController.abort() 中止請求。 

  1. const controller = new AbortController();  
  2. let signal = controller.signal;  
  3.  console.log('signal 的初始狀態: ', signal);  
  4. const downloadBtn = document.querySelector('.download');  
  5. const abortBtn = document.querySelector('.abort');  
  6. downloadBtn.addEventListener('click', fetchVideo);  
  7. abortBtn.addEventListener('click', function() {  
  8.   controller.abort();  
  9.  console.log('signal 的中止狀態: ', signal);  
  10. });  
  11. function fetchVideo() {  
  12.   //...  
  13.   fetch(url, {signal}).then(function(response) {  
  14.     //...  
  15.   }).catch(function(e) {  
  16.     reports.textContent = 'Download error: ' + e.message;  
  17.   })  
  18.  
  19. 復制代碼 

當我們中止請求后,網絡請求變成了如下所示的情況:

我們再來看看 AbortSignal 中止前和中止后的狀態:

可以看到,AbortSignal 對象的 aborted 屬性由初始時的 false 變成了中止后的 true 。

線上運行示例[4] (代碼來源于MDN[5])

AbortControllter 有兼容性問題,如下:

axios 中斷請求

axions 中斷請求有兩種方式:

方式一

使用 CancelToken.souce 工廠方法創建一個 cancel token,代碼如下: 

  1. const CancelToken = axios.CancelToken;  
  2. const source = CancelToken.source();  
  3. axios.get('https://mdn.github.io/dom-examples/abort-api/sintel.mp4', {  
  4.   cancelToken: source.token  
  5. }).catch(function (thrown) {  
  6.   // 判斷請求是否已中止  
  7.   if (axios.isCancel(thrown)) {  
  8.     // 參數 thrown 是自定義的信息  
  9.     console.log('Request canceled', thrown.message);  
  10.   } else {  
  11.     // 處理錯誤  
  12.   }  
  13. });  
  14. // 取消請求(message 參數是可選的)  
  15. source.cancel('Operation canceled by the user.');  
  16. 復制代碼 

中止后的網絡請求變成如下所示:

我們再來看看初始時和中止后的 souce 狀態:

可以看到,初始時和中止后的 source 狀態并沒還有發生改變。那么我們是如何判斷請求的中止狀態呢?axios 為我們提供了一個 isCancel() 方法,用于判斷請求的中止狀態。isCancel() 方法的參數,就是我們在中止請求時自定義的信息。

方式二

通過傳遞一個 executor 函數到 CancelToken 的構造函數來創建一個 cancel token: 

  1. const CancelToken = axios.CancelToken;  
  2. let cancel;  
  3. axios.get('/user/12345', { 
  4.   cancelToken: new CancelToken(function executor(c) {  
  5.     // executor 函數接收一個 cancel 函數作為參數  
  6.     ccancel = c;  
  7.   })  
  8. });  
  9. // 取消請求  
  10. cancel('Operation canceled by the user.');  
  11. 復制代碼 

瀏覽器運行結果與方式一一致,此處不再贅述。

線上運行示例[6] (代碼來源于MDN[7])

umi-request 中斷請求

umi-request 基于 fetch 封裝, 兼具 fetch 與 axios 的特點, 中止請求與 fetch 和 axios 一致不再過多贅述,詳情可見官方文檔 中止請求[8]

需要注意的是 AbortController 在低版本瀏覽器polyfill有問題,umi-request 在某些版本中并未提供 AbortController 的方式中止請求。

umi 項目中使用 CancelToken 中止請求

umi 項目中默認的請求庫是umi-request,因此我們可以使用umi-request提供的方法來中止請求。另外,在umi項目中可以搭配使用了dva,因此下面簡單介紹下在dva中使用CancelToken中止請求的流程。

1、在 services 目錄下的文件中編寫請求函數和取消請求的函數 

  1. import request from '@/utils/request';  
  2. const CancelToken = request.CancelToken;  
  3. let cancel: any;  
  4. // 合同文件上傳 OSS  
  5. export async function uploadContractFileToOSS(postBody: Blob): Promise<any> {  
  6.   return request(`/fms/ossUpload/financial_sys/contractFile`, {  
  7.     method: "POST",  
  8.     data: postBody,  
  9.     requestType: 'form',  
  10.     // 傳遞一個 executor 函數到 CancelToken 的構造函數來創建一個 cancel token  
  11.     cancelToken: new CancelToken((c) => {  
  12.       ccancel = c  
  13.     })  
  14.   })  
  15.  
  16. // 取消合同文件上傳  
  17. export async function cancelUploadFile() {  
  18.   return cancel && cancel()  
  19.  
  20. 復制代碼 

2、在 models 中編寫 Effect: 

  1. *uploadContractFileToOSS({ payload }: AnyAction, { call, put }: EffectsCommandMap): any {  
  2.   const response = yield call(uploadContractFileToOSS, payload);  
  3.   yield put({  
  4.     type: 'save',  
  5.     payload: {  
  6.       uploadOSSResult: response?.data,  
  7.     }  
  8.   })  
  9.   return response?.data  
  10. },  
  11. *cancelUploadFile(_: AnyAction, { call }: EffectsCommandMap): any {  
  12.   const response = yield call(cancelUploadFile)  
  13.   return response  
  14. },  
  15. 復制代碼 

3、在頁面中通過dispatch函數觸發相應的action: 

  1. // 發起請求  
  2. dispatch({  
  3.   type: 'contract/fetchContractFiles',  
  4.   payload: {  
  5.     contractId: `${id}`,  
  6.   }  
  7. })  
  8. // 取消請求  
  9. dispatch({  
  10.   type: "contract/cancelUploadFile"  
  11. })    
  12. 復制代碼 

4、在 utils/request.js 中統一處理中止請求的攔截: 

  1. const errorHandler = (error: { response: Response }): Response => {  
  2.   const { response } = error;  
  3.   notification.destroy()  
  4.   if (response && response.status) {  
  5.     const errorText = codeMessage[response.status] || response.statusText;  
  6.     const { status, url } = response;  
  7.     notification.error({  
  8.       message: `請求錯誤 ${status}: ${url}`,  
  9.       description: errorText,  
  10.     });  
  11.   } else if (error?.['type'] === 'TypeError') {  
  12.     notification.error({  
  13.       description: '您的網絡發生異常,無法連接服務器',  
  14.       message: '網絡異常',  
  15.     });  
  16.   } else if (error?.['request']?.['options']?.['cancelToken']) {  
  17.     notification.warn({  
  18.       description: '當前請求已被取消',  
  19.       message: '取消請求',  
  20.     });  
  21.   } else if (!response) {  
  22.     notification.error({  
  23.       description: '您的網絡發生異常,無法連接服務器',  
  24.       message: '網絡異常',  
  25.     });  
  26.   } else {  
  27.     notification.error({  
  28.       description: '請聯系網站開發人員處理', 
  29.       message: '未知錯誤',  
  30.     });  
  31.   }  
  32.   return response;  
  33. };  
  34. 復制代碼  

 

責任編輯:龐桂玉 來源: Web開發
相關推薦

2015-08-13 10:29:12

面試面試官

2022-04-01 12:38:32

cookie代碼面試

2021-01-18 05:13:04

TomcatHttp

2010-08-12 16:28:35

面試官

2023-02-16 08:10:40

死鎖線程

2020-06-12 15:50:56

options前端服務器

2024-02-20 14:10:55

系統緩存冗余

2024-03-18 14:06:00

停機Spring服務器

2024-09-11 22:51:19

線程通訊Object

2025-03-17 00:00:00

2024-04-03 00:00:00

Redis集群代碼

2021-07-06 07:08:18

管控數據數倉

2023-11-20 10:09:59

2021-05-27 05:37:10

HTTP請求頭瀏覽器

2023-10-08 15:23:12

2015-08-24 09:00:36

面試面試官

2024-02-04 10:08:34

2024-12-25 15:44:15

2024-05-11 15:11:44

系統軟件部署

2022-05-23 08:43:02

BigIntJavaScript內置對象
點贊
收藏

51CTO技術棧公眾號

欧美国产日本视频| 在线日本高清免费不卡| 欧美在线观看视频一区二区| 日韩一本精品| 91国在线视频| 自拍欧美日韩| 日韩二区三区在线| 男女视频一区二区三区| 日本综合在线| 成人一级黄色片| 欧美在线观看网址综合| 亚洲综合欧美综合| 我要色综合中文字幕| 欧美日韩国产中字| 日韩久久久久久久| 99精品国产99久久久久久97| 99日韩精品| 亚洲精品在线网站| 久久久久久香蕉| bestiality新另类大全| 成av人片一区二区| 日本国产欧美一区二区三区| 青娱乐国产视频| 4438五月综合| 午夜精品一区在线观看| 一本久道久久综合狠狠爱亚洲精品| 国产欧美一级片| 香蕉久久夜色精品国产| 日韩中文字幕亚洲| 黄色性生活一级片| 国产情侣一区在线| 日本丶国产丶欧美色综合| 日韩欧美视频免费在线观看| 欧美高清电影在线| 国产精品996| 国产高清在线不卡| 日本五十路女优| 欧美残忍xxxx极端| 亚洲免费av片| 中文字幕无人区二| 日韩欧美一区二区三区免费观看| 亚洲精品成人天堂一二三| 欧美日韩最好看的视频| 性生活三级视频| 另类人妖一区二区av| 68精品久久久久久欧美| 艳妇荡乳欲伦69影片| 伊人久久大香线蕉av不卡| 日韩亚洲国产中文字幕欧美| 无码少妇一区二区三区芒果| 51漫画成人app入口| 亚洲图片你懂的| 日本婷婷久久久久久久久一区二区| 图片区 小说区 区 亚洲五月| 国产69精品久久久久777| 99久久精品免费看国产一区二区三区 | 久青草国产97香蕉在线视频| 天天操天天干天天操天天干| 精品国产一区二区三区久久久蜜臀| 日韩电影中文 亚洲精品乱码| 男男做爰猛烈叫床爽爽小说| 精品国产一区二区三区成人影院| 欧美本精品男人aⅴ天堂| 日本成人在线免费| 成人涩涩网站| 亚洲国产日韩欧美在线动漫| 精品人妻一区二区三区日产乱码卜| 久久国产精品色av免费看| 亚洲精品www| 日韩人妻无码一区二区三区| 国产99亚洲| 亚洲欧洲国产精品| 战狼4完整免费观看在线播放版| 欧美国产一区二区三区激情无套| 欧美成人黄色小视频| 久久久久99精品成人片毛片| 日韩网站在线| 国产精品国内视频| 99久久精品免费看国产交换| 风间由美一区二区三区在线观看| 久久久久久艹| 98在线视频| 一区二区三区**美女毛片| 极品美女扒开粉嫩小泬| 成人自拍视频网| 欧美一级夜夜爽| 在线播放国产视频| 亚洲精品蜜桃乱晃| xvideos国产精品| 日本熟妇成熟毛茸茸| 老妇喷水一区二区三区| 91社区国产高清| 天堂中文网在线| 18欧美乱大交hd1984| 僵尸世界大战2 在线播放| 日韩美女在线看免费观看| 欧美美女喷水视频| 污污内射在线观看一区二区少妇| 国产一区二区三区91| 欧美黄色片在线观看| 天堂网视频在线| 久久国产福利国产秒拍| 精品国产第一页| 黄色片网站在线观看| 一本大道综合伊人精品热热| 爱情岛论坛亚洲自拍| 欧美女优在线视频| 欧美极品少妇xxxxx| 国产午夜无码视频在线观看| 国产91富婆露脸刺激对白| 先锋影音一区二区三区| 182在线播放| 91 com成人网| 先锋影音av在线| 日韩视频中文| 丁香五月网久久综合| av影片在线看| 色综合久久天天| japanese在线观看| 亚洲精品成人影院| 国产精品极品尤物在线观看 | 91精品国产综合久久久蜜臀九色| 精品一区二区三区av| 欧美日韩中文国产一区发布| 国产自产自拍视频在线观看| 日韩精品中文字幕在线不卡尤物| 欧美一区二区三区成人精品| 亚洲精品成人影院| 国产精品三级久久久久久电影| 深夜福利视频在线观看| 亚洲精品国产第一综合99久久| 成人日韩在线视频| 精品高清久久| 国产精品成人av在线| 亚洲av毛片成人精品| 亚洲午夜精品在线| 国产a级片视频| 欧美视频不卡| 亚洲在线免费视频| 黄色网在线免费观看| 欧美群妇大交群中文字幕| 国产精品久久久视频| 日韩一区欧美二区| 日韩欧美精品在线不卡| 伊伊综合在线| 亚洲欧美日韩网| 激情视频网站在线观看| 久久久综合视频| aaaaaa亚洲| 国产一区二区三区站长工具| 国产成人精品最新| 97最新国自产拍视频在线完整在线看| 欧美性大战久久久久久久 | 欧美日韩国产高清电影| 国产精品久久久久av免费| 国产在线观看网站| 欧美色图免费看| 美国精品一区二区| 国产一区在线观看视频| 精品视频在线观看一区二区| 99re8这里有精品热视频免费| 欧美激情亚洲另类| 日漫免费在线观看网站| 日本高清不卡在线观看| 快灬快灬一下爽蜜桃在线观看| 蜜臀久久99精品久久久久久9| 亚洲自拍偷拍二区| 涩爱av色老久久精品偷偷鲁 | 国产+成+人+亚洲欧洲自线| 男人天堂av片| 美女亚洲一区| 国产精品日韩欧美综合| 18+激情视频在线| 亚洲精品720p| 中文字幕有码视频| 亚洲精品亚洲人成人网在线播放| 久久精品视频在线播放| 欧美 丝袜 自拍 制服 另类| 九九视频免费观看视频精品 | 日本一区午夜艳熟免费| 美女福利一区| 国产精品爽爽爽| 色爱综合区网| 日韩电影中文字幕在线| 亚洲天堂久久久久| 亚洲国产一区二区三区| www.狠狠爱| 国产精一区二区三区| 国内性生活视频| 91亚洲国产高清| 国产在线一区二区三区欧美| 欧美暴力调教| 欧美精品成人在线| av在线第一页| 精品成人佐山爱一区二区| 国产精品免费精品一区| 亚洲素人一区二区| 青青草视频播放| 久久97超碰国产精品超碰| av免费看网址| 日本高清免费电影一区| 91一区二区三区| 毛片无码国产| 欧美激情视频网站| 日本在线视频网| 亚洲精品在线91| 亚洲国产福利视频| 欧美吞精做爰啪啪高潮| 国产精品免费av一区二区| 国产精品国产三级国产aⅴ原创 | 黄色片免费在线| 欧美大胆人体bbbb| 在线视频欧美亚洲| 欧美性极品xxxx做受| 久久久久久天堂| 国产精品久久久久久久浪潮网站| 艳妇乳肉亭妇荡乳av| 国产专区综合网| 中文久久久久久| 美女久久网站| 国产视频九色蝌蚪| 亚洲国产免费看| 国产卡一卡二在线| 成人免费在线播放| 久久精品国产第一区二区三区最新章节 | 538精品在线观看| thepron国产精品| 永久看看免费大片| 久久99精品视频| 四季av一区二区| 久久午夜精品一区二区| 久草青青在线观看| 一区二区高清| 欧美,日韩,国产在线| 激情欧美丁香| 国产免费黄色一级片| 亚洲视频狠狠| 三上悠亚免费在线观看| 香蕉久久网站| 天天操天天干天天玩| 一区二区三区四区电影| 中文字幕久久综合| 91精品二区| 国产又粗又大又爽的视频| 亚洲91中文字幕无线码三区| 超碰成人在线免费观看| 亚洲一区二区日韩| 异国色恋浪漫潭| 欧美三级免费| 蜜臀精品一区二区| 中文国产一区| 亚洲中文字幕无码中文字| 久久国产精品亚洲77777| 欧美性大战久久久久xxx| 亚洲欧美日本国产专区一区| 成人三级视频在线播放| 免费在线观看不卡| 日韩在线不卡一区| 国产精品一区二区久激情瑜伽| 无码国产精品一区二区高潮| 国产成人精品www牛牛影视| 91精品又粗又猛又爽| av中文字幕在线不卡| 女~淫辱の触手3d动漫| 国产欧美精品在线观看| 麻豆网址在线观看| 亚洲一级片在线观看| 久久久精品免费看| 在线观看欧美黄色| 国产视频在线观看免费| 精品乱人伦小说| 欧美色视频免费| 中文字幕免费精品一区高清| 成年视频在线观看| 久久久久久久久国产精品| 综合久久2023| 91在线国产电影| 女同另类激情重口| 先锋影音欧美| 狠狠综合久久| 国产a级片免费观看| 国产美女娇喘av呻吟久久| 最近日本中文字幕| 中文字幕在线观看一区| 欧美一级高潮片| 欧美亚州韩日在线看免费版国语版 | 精品999视频| 亚洲免费三区一区二区| 久久久午夜影院| 欧美日韩极品在线观看一区| 亚洲国产精品一| 亚洲天堂免费视频| 亚洲奶水xxxx哺乳期| 日本中文字幕成人| 日韩最新av| 亚洲一区二区三区精品视频| 在线精品一区| 小早川怜子一区二区三区| 久久九九99视频| 九热这里只有精品| 欧美日韩一卡二卡三卡 | 久久九九热免费视频| 中文字幕高清在线播放| 91成人免费在线观看| 精品国产91乱码一区二区三区四区 | 国产一精品一aⅴ一免费| 国产精品女主播av| 六月丁香婷婷综合| 日韩欧美区一区二| av播放在线| 欧美中文字幕视频| 成人av激情人伦小说| 久久久国产精华液999999| 麻豆精品网站| av网站有哪些| 亚洲国产成人av好男人在线观看| 国产精品女人久久久| 亚洲欧美综合精品久久成人| free性m.freesex欧美| 亚洲一区二区三区香蕉| 日本a级不卡| 黄色三级视频在线| 久久一区二区三区国产精品| 九九热国产视频| 日韩美一区二区三区| 国产黄大片在线观看画质优化| 国产精品久久久久久久久久小说 | 日韩黄色精品视频| 日韩一区二区在线看| 一区二区三区视频网站| 国产脚交av在线一区二区| 伊人久久大香线蕉综合网站| av免费观看网| 91丝袜呻吟高潮美腿白嫩在线观看| 免费又黄又爽又色的视频| 91精品黄色片免费大全| 美女国产在线| 亚洲一区亚洲二区| 一区二区三区在线| 99精品视频国产| 亚洲男同1069视频| 亚洲h视频在线观看| 欧美激情在线观看| jizzjizzjizz欧美| 超碰成人免费在线| 不卡区在线中文字幕| 国产精品免费av一区二区| 亚洲精品福利在线| 在线观看特色大片免费视频| 中文字幕亚洲电影| 印度午夜性春猛xxx交| 91麻豆精品91久久久久久清纯 | 国产精品视频中文字幕| 亚洲国产精品v| 97视频免费在线| 欧美精品一本久久男人的天堂| 91国内精品白嫩初高生| 少妇无码av无码专区在线观看 | 黑鬼狂亚洲人videos| 日韩一区二区中文字幕| 美女尤物在线视频| 国产尤物91| 久久综合影音| 国产精品久久久久久成人| 欧美精品日韩精品| 色黄网站在线观看| 久久综合毛片| 免费久久精品视频| 国产精品三区在线观看| 欧美成人性战久久| 亚洲v.com| 中文字幕欧美日韩一区二区三区| 国产成人亚洲综合a∨猫咪| 日韩一区二区视频在线| 在线视频日本亚洲性| 精品一区二区三区中文字幕视频| 青青草精品视频在线| 欧美激情一区二区三区四区 | 懂色av一区二区夜夜嗨| 国产午夜免费福利| 久久九九国产精品怡红院| 麻豆一区二区| 日韩欧美国产片| 午夜精品久久久久久久久| www.久久热.com| 国产高清一区视频| 日韩精品一区第一页| 久久久久久久中文字幕| 亚洲欧美一区二区三区在线| 视频欧美精品| 男人用嘴添女人下身免费视频| 国产精品美女久久久久久久| 亚洲经典一区二区三区| 国产精品第100页| 国精品一区二区三区| 精品人妻无码一区| 亚洲福利视频久久| 羞羞视频在线观看一区二区| 欧美在线观看成人| 一区二区三区欧美视频|