日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何获取.then的返回值_仅仅知道如何终止XHR请求,或许对你来说是不够的!

發(fā)布時(shí)間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何获取.then的返回值_仅仅知道如何终止XHR请求,或许对你来说是不够的! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

TLDR:

當(dāng)我們需要的時(shí)候,我們可以通過AbortController接口來終止一個(gè)或者多個(gè)請(qǐng)求。

前言

到目前為止,我們有兩個(gè)常用的基本的手段去發(fā)送請(qǐng)求進(jìn)而局部刷新頁(yè)面內(nèi)容,其一是XMR(XMLHttpRequest),其二是fetch,我們一個(gè)個(gè)說

XHR

對(duì)于XHR,我們或許已經(jīng)很熟悉了,當(dāng)我們想要發(fā)送一個(gè)請(qǐng)求的時(shí)候,我們可以這樣做:

const xhr = new XMLHttpRequest(); const method = 'GET'; const url = 'https://xxx';xhr.open(method, url, true); xhr.onreadystatechange = () => {if (xhr.readyState === 4) {// do something} } xhr.send();

當(dāng)我們由于某種原因(比如重復(fù)請(qǐng)求)想要終止它的時(shí)候,我們只需要調(diào)用abort即可。

xhr.abort();

很方便也很簡(jiǎn)潔,但是對(duì)于fetch呢?

fetch

首先我們看下fetch的基本定義:

  • 接受一個(gè)必須的參數(shù)和一個(gè)可選的參數(shù)
  • 定義要獲取的資源,地址或者Request對(duì)象
  • 可選的配置對(duì)象,比如請(qǐng)求方式、body、credentials等等,其中我們需要知道的是signal,他的定義如下: 一個(gè)AbortSignal對(duì)象實(shí)例,允許你通過AbortController與fetch請(qǐng)求通信或者終止fetch
  • 返回值是一個(gè)promise

看到這里我們已經(jīng)知道了答案,但是我們需要再去了解一下上文所說的AbortController.

AbortController

最初es6引入fetch的時(shí)候,其實(shí)就是沒有abort這樣的功能,不過廣大程序朋友們還會(huì)希望能有這個(gè)靈活的api,所以在2015年就有人提了這個(gè)issue,再次之后大家嘗試了注入promise式的取消或者是其他hack等等,經(jīng)過這份折騰最終我們迎來了AbortController和AbortSignal。

AbortController目前很簡(jiǎn)單,有一個(gè)制度的屬性AbortController.signal和一個(gè)用來中斷請(qǐng)求的.abort()

光說也沒啥意思,咱看代碼說話:

// 啟動(dòng)一個(gè)node服務(wù),其中包括一個(gè)api和一個(gè)html頁(yè)面const Koa = require('koa'); const fs = require('fs'); const app = new Koa();const sleep = () => {return new Promise(res => {setTimeout(function() {res();}, 3000);}); };app.use(async ctx => {if (ctx.request.url === '/api') {await sleep();ctx.body = 'Hello World';} else {ctx.status = 200;ctx.respond = false;fs.createReadStream('./test.html').pipe(ctx.res);} });app.listen(3000);

下面是test.html的內(nèi)容

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><script>fetch('/api').then((res) => {console.log(res, '請(qǐng)求成功');});</script> </body> </html>

啟動(dòng)服務(wù)后,我們看下network的內(nèi)容。

我們注意兩個(gè)地方,一個(gè)代表fetch請(qǐng)求,一個(gè)代表請(qǐng)求的延時(shí)時(shí)間,也就是我們定義的三秒

取消fetch

這時(shí)候我們想中斷,就可以這樣做:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><script>// 增加了如下幾行const controller = new AbortController();const signal = controller.signal;console.log(signal, 'signal的初始狀態(tài)');signal.addEventListener('abort', function (e) {console.log(signal, 'signal的中斷狀態(tài)');});setTimeout(function() {controller.abort();}, 2000);// 增加部分結(jié)束fetch('/api', {signal}).then((res) => {console.log(res, '請(qǐng)求成功');});</script> </body> </html>

再次運(yùn)行,我們會(huì)得到如下結(jié)果:

從圖中我們可以很清楚的看到,請(qǐng)求在2s后被終止,請(qǐng)求狀態(tài)變?yōu)閏anceled,然后aborted的狀態(tài)由false轉(zhuǎn)變?yōu)閠rue。

就是這樣,我們對(duì)fetch也進(jìn)行的取消操作,還算是豁然開朗吧。嘻嘻。

兼容性

雖然AbortController已經(jīng)誕生很長(zhǎng)時(shí)間了,但是目前mdn上的定義還是實(shí)驗(yàn)性技術(shù),查看mdn我們可以發(fā)現(xiàn),其實(shí)主流瀏覽器大部分都支持了,如果我們開發(fā)的平臺(tái)很新還是可以使用的,相信不遠(yuǎn)的將來,肯定會(huì)大批量使用。前端的道路也會(huì)越來越順暢!

最后如果這邊文章能幫給你帶來一點(diǎn)幫助,歡迎關(guān)注,點(diǎn)贊,制作不易,與君共勉!

總結(jié)

以上是生活随笔為你收集整理的如何获取.then的返回值_仅仅知道如何终止XHR请求,或许对你来说是不够的!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线a级 | 成人性生生活性生交3 | 人操人视频 | 真人抽搐一进一出视频 | 午夜寂寞自拍 | 波多野结衣视频在线播放 | 亚洲综合自拍偷拍 | 午夜影院操 | 黑人激情视频 | 久久福利社 | 人人超碰在线 | 性欧美bb | 手机av免费在线 | 少妇看片 | 色婷婷av国产精品 | 国产美女被遭强高潮免费网站 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 99资源在线 | 中文字幕在线播放日韩 | 窝窝视频在线 | 欧美日韩a | 色噜噜狠狠一区二区三区果冻 | 72pao成人国产永久免费视频 | 91精品国产一区二区三竹菊影视 | 人人澡人人插 | 日日夜夜免费精品 | 亚洲男人天堂久久 | 久久久久成人精品无码 | 国产一区二区视频免费 | 欧美大黑bbbbbbbbb在线 | 国产午夜网站 | 911香蕉 | 欧美在线综合 | 中文字幕一区在线播放 | 日本www视频在线观看 | 欧美xxxx视频 | 日韩aⅴ视频 | 欧美性视频播放 | 欧美精品偷拍 | 免费的黄网站 | 国产女人在线观看 | 欧美精品一区二区视频 | 综合久久一区二区 | 在线免费观看福利 | 久久久不卡国产精品一区二区 | 国产精品久久久91 | 非洲黄色片 | 久久精品99久久 | 男女免费视频 | 极品少妇一区 | 久久久久久久久久91 | 毛片福利 | 97在线免费观看视频 | 日本免费精品 | 中文久久乱码一区二区 | 91成人免费网站 | 久久无毛 | 91国内精品久久久 | 久久久精品99 | 狠狠操一区二区 | 精品一区二区三区免费 | 国产九色sp调教91 | 精品成人网 | 日本女人性视频 | 国产免费一区视频观看免费 | 欧美在线 | 亚洲 | 国产精品久久一 | 日韩免费高清视频网站 | 亚洲一区免费电影 | 日韩天堂| 国产精品久久久久久无人区 | 秋霞在线视频观看 | 日韩一级在线视频 | 久久精品国产av一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 五十路av在线| 羽月希奶水一区二区三区 | 久久国产精品久久精品国产 | www亚洲天堂| 免费网站av | 国产精品久久久久久妇女6080 | www亚洲一区| 蜜桃视频一区二区在线观看 | 狠狠鲁影院 | 久久看看 | 日韩国产亚洲欧美 | 最近中文字幕一区二区 | 国产欧美日韩专区 | 在线观看av网 | 男女国产视频 | 性欧美videos另类艳妇3d | 久操视频免费观看 | 欧美一区二区三区久久综合 | 国产主播在线观看 | 精品欧美一区二区三区 | 超污视频在线观看 | 青青艹av| 日批视频免费在线观看 | 美女裸体跪姿扒开屁股无内裤 |