日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

前端JS發起的請求能暫停嗎?

來源: 責編: 時間:2024-06-12 08:45:29 255觀看
導讀在討論前端JS發起的請求是否能暫停時,需要明確兩個概念:什么狀態可以被認為是“暫停”?以及什么是JS發起的請求?如何定義暫停?暫停指的是臨時停止一個已經開始但尚未完成的過程。這意味著這個過程可以在某個時間點被中斷,并

W2w28資訊網——每日最新資訊28at.com

在討論前端JS發起的請求是否能暫停時,需要明確兩個概念:什么狀態可以被認為是“暫停”?以及什么是JS發起的請求?W2w28資訊網——每日最新資訊28at.com

如何定義暫停?

暫停指的是臨時停止一個已經開始但尚未完成的過程。這意味著這個過程可以在某個時間點被中斷,并在另一個時間點恢復。W2w28資訊網——每日最新資訊28at.com

什么是請求?

首先,讓我們介紹一下TCP/IP網絡模型。網絡模型從上到下分為應用層、傳輸層、網絡層和網絡接口層。W2w28資訊網——每日最新資訊28at.com

W2w28資訊網——每日最新資訊28at.com

上圖表示,每次網絡傳輸,應用數據都需要通過網絡模型逐層打包,然后發送到目的地,就像寄包裹一樣。要寄送的物品首先被包裝并登記其大小,然后放入箱子并登記目的地,最后裝上運輸工具送到目的地。W2w28資訊網——每日最新資訊28at.com

請求的概念可以理解為客戶端通過多次數據網絡傳輸將完整數據發送到服務器,而服務器為特定請求返回的數據可以稱為響應。W2w28資訊網——每日最新資訊28at.com

理論上,應用層協議可以通過標記數據包序列號來實現暫停機制。然而,TCP協議不支持這一點。TCP協議的數據傳輸是面向流的,數據被視為連續的字節流。客戶端發送的數據將被分成多個獨立傳輸的TCP段。無法直接控制每個TCP段的傳輸,因此無法實現暫停請求或響應的功能。W2w28資訊網——每日最新資訊28at.com

W2w28資訊網——每日最新資訊28at.com

回答問題

如果請求指的是網絡模型中的傳輸,那么自然是不可能暫停的。W2w28資訊網——每日最新資訊28at.com

考慮到使用場景——由JS發起的請求。因此,可以認為這里的問題指的是在JS運行時發起的XMLHttpRequest或fetch請求。由于請求已經發出,問題自然變成響應是否可以暫停。W2w28資訊網——每日最新資訊28at.com

我們都知道,上傳大文件分片和下載大文件本質上是定義分片順序,按順序請求,可以通過中斷和記錄中斷點來實現暫停和恢復。然而,單個請求并沒有這樣的環境。W2w28資訊網——每日最新資訊28at.com

使用JS實現“假暫停”機制

雖然我們無法真正實現暫停請求,但我們可以模擬一個假暫停功能。在前端業務場景中,數據在接收到后不會立即顯示在客戶端。前端開發人員需要先處理這些數據,然后再渲染到界面上。如果我們在發起請求前添加一個控制器,并且在請求返回時該控制器處于暫停狀態,則不處理數據。相反,等待控制器恢復后再處理數據。這樣我們是否就達到了目標呢?讓我們嘗試實現它。W2w28資訊網——每日最新資訊28at.com

如果我們使用 fetch 發起請求,可以設計一個控制器 Promise,并結合請求使用 Promise.all 封裝。當 fetch 完成時,檢查控制器是否處于暫停狀態;如果沒有暫停,直接resolve 控制器并同時 resolve 和拋出 Promise.all。W2w28資訊網——每日最新資訊28at.com

function _request () {  return new Promise<number>((res) => setTimeout(() => {    res(123)  }, 3000))}// 原本想用 "class extends Promise" 實現。// 問題在于https://github.com/nodejs/node/issues/13678。function createPauseControllerPromise () {  const result = {    isPause: false,    resolveWhenResume: false,    resolve (value?: any) {},    pause () {      this.isPause = true    },    resume () {      if (!this.isPause) return      this.isPause = false      if (this.resolveWhenResume) {          this.resolve()      }    },    promise: Promise.resolve()  }    const promise = new Promise<void>((res) => {    result.resolve = res  })    result.promise = promise  return result}function requestWithPauseControl <T extends () => Promise<any>>(request: T) {  const controller = createPauseControllerPromise()    const controlRequest = request().then((data) => {      if (!controller.isPause) controller.resolve()      controller.resolveWhenResume = controller.isPause      return data  })    const result = Promise.all([controlRequest, controller.promise])      .then(data => data[0])        result.finally(() => controller.resolve())    (result as any).pause = controller.pause.bind(controller);  (result as any).resume = controller.resume.bind(controller);    return result as ReturnType<T> & { pause: () => void, resume: () => void }}

使用方法

我們可以將調用 _request 替換為調用 requestWithPauseControl(_request) ,并通過返回的pause和 resume 方法控制暫停和恢復。W2w28資訊網——每日最新資訊28at.com

const result = requestWithPauseControl(_request).then((data) => {    console.log(data)})if (Math.random() > 0.5) { result.pause() }setTimeout(() => {    result.resume()}, 4000)

執行原理

在流程設計上,步驟如下:設計一個控制器,發起請求,在接收到響應后,檢查控制器的狀態。如果控制器不處于“暫停”狀態,則正常返回數據;如果控制器處于“暫停”狀態,則將控制器設置為一旦調用resume方法就返回數據的狀態。W2w28資訊網——每日最新資訊28at.com

在代碼中,使用 Promise.all 將控制器 Promise 綁定。如果控制器處于暫停狀態,Promise.all 不會被釋放。然后對應地暴露 pause 方法和 resume 方法供外部使用。W2w28資訊網——每日最新資訊28at.com

最后

有些人可能誤以為網絡請求和響應根本無法暫停。我在文章開頭特別提到了數據傳輸相關的內容,并加了一句“理論上,應用層協議可以通過標記數據包序列號來實現暫停機制”。這意味著,如果你修改HTTP或設計自己的應用層協議(例如socket、vmess等協議),只要雙方支持該協議,就可以實現請求或響應的暫停。這不會影響TCP連接,但實現暫停機制需要綜合考慮場景和TCP策略,以確保更好的可靠性。W2w28資訊網——每日最新資訊28at.com

例如,提供一種控制消息類型來控制傳輸暫停,需要標記所有數據包的序列號。當需要暫停時,發送帶有序列號的暫停消息到接收端。接收端收到暫停消息后,將已收到的數據包標記塊返回給發送端(類似分片上傳機制)。W2w28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-93208-0.html前端JS發起的請求能暫停嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 網易面試:SpringBoot如何開啟虛擬線程?

下一篇: C# 實現動態訪問 WebService,兼容 .NET Framework 和 .NET Core

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美成人视屏| 久久九九热免费视频| 亚洲国产一区二区三区青草影视| 亚洲国产91精品在线观看| 亚洲欧洲综合| 亚洲一二三级电影| 久久久精品欧美丰满| 欧美国产91| 国产精品综合视频| 在线观看一区二区精品视频| 一本色道婷婷久久欧美| 欧美一区二区视频在线| 免费在线亚洲欧美| 国产精品国产自产拍高清av| 精品不卡一区二区三区| 中文无字幕一区二区三区| 欧美怡红院视频| 欧美另类一区二区三区| 国产日韩欧美一区二区| 91久久精品国产91性色tv| 亚洲一区三区视频在线观看| 可以看av的网站久久看| 国产精品久久网站| 精品91在线| 亚洲视频在线一区| 噜噜噜躁狠狠躁狠狠精品视频 | 亚洲国产精品成人一区二区| 亚洲少妇诱惑| 噜噜噜噜噜久久久久久91| 国产精品婷婷午夜在线观看| 亚洲国产精品成人一区二区| 亚洲欧美综合国产精品一区| 欧美精品三级| 精品成人久久| 小黄鸭视频精品导航| 欧美麻豆久久久久久中文| 国产亚洲精品一区二555| 99精品久久久| 奶水喷射视频一区| 国产婷婷色一区二区三区四区| 99www免费人成精品| 久久综合网hezyo| 国产亚洲欧美另类一区二区三区| 9色精品在线| 美女精品在线观看| 国产亚洲aⅴaaaaaa毛片| 亚洲一区二区三区精品视频| 欧美精品高清视频| 亚洲福利视频二区| 久久精品久久综合| 国产精品伊人日日| 亚洲伊人观看| 欧美日韩午夜在线| 亚洲激情综合| 免费观看成人网| 影音先锋久久资源网| 欧美一区二区三区四区高清 | 欧美久久电影| 亚洲国产综合91精品麻豆| 久久精品官网| 国产日韩一区二区三区在线| 亚洲一区免费在线观看| 欧美午夜精品| 99热这里只有精品8| 欧美大片在线看| 在线观看视频欧美| 久久天天躁狠狠躁夜夜av| 国产亚洲成精品久久| 亚洲欧美国产va在线影院| 欧美三级日韩三级国产三级| 亚洲精品视频一区| 欧美激情亚洲精品| 91久久精品国产91久久性色tv| 久久一区亚洲| 今天的高清视频免费播放成人| 久久激情网站| 国语自产在线不卡| 开心色5月久久精品| 黄色一区二区三区| 久久久久一本一区二区青青蜜月| 国产综合激情| 久久综合精品国产一区二区三区| 激情丁香综合| 美女成人午夜| 亚洲精品久久久久久一区二区| 欧美精品国产精品日韩精品| 亚洲精品一区二区三区福利| 欧美精品一区二区三区高清aⅴ| 亚洲欧洲日本国产| 欧美日韩成人免费| 亚洲午夜久久久| 国产精品久久久久久久久动漫| 亚洲欧美日韩国产另类专区| 国产九区一区在线| 欧美一区免费| 原创国产精品91| 男同欧美伦乱| 99视频热这里只有精品免费| 欧美午夜电影在线观看| 亚洲欧美久久久| 国产在线视频欧美一区二区三区| 久久久久久69| 亚洲精品免费在线观看| 欧美日韩国产黄| 亚洲一二三级电影| 国产亚洲欧美激情| 猛男gaygay欧美视频| 亚洲欧洲一二三| 国产精品久久久久秋霞鲁丝| 久久国产精品99国产精| 一区在线免费观看| 欧美精品一区二区三区在线播放 | 欧美另类人妖| 亚洲欧美电影在线观看| 狠狠色狠狠色综合日日tαg | 欧美男人的天堂| 亚洲伊人观看| 好看的av在线不卡观看| 欧美精品不卡| 香蕉国产精品偷在线观看不卡| 狠狠色丁香婷婷综合| 欧美国产先锋| 亚洲欧美另类在线| 伊大人香蕉综合8在线视| 欧美视频日韩视频| 久久精品99久久香蕉国产色戒| 亚洲激情中文1区| 国产精品三上| 鲁大师成人一区二区三区| 一本不卡影院| 狠狠色丁香婷婷综合久久片| 欧美日韩在线不卡一区| 欧美在线视频在线播放完整版免费观看 | 男同欧美伦乱| 亚洲伊人久久综合| 亚洲国产国产亚洲一二三| 国产精品久久久久久av福利软件| 久久阴道视频| 亚洲综合色丁香婷婷六月图片| 韩国一区二区三区美女美女秀| 欧美视频一区| 免费观看久久久4p| 欧美一区二区三区久久精品茉莉花| 亚洲国产清纯| 国产日韩亚洲欧美精品| 欧美日产在线观看| 久久久久看片| 亚洲私人影院在线观看| 亚洲高清网站| 国产亚洲精品久久久| 欧美网站在线| 欧美高清视频| 久久大逼视频| 亚洲特黄一级片| 亚洲欧洲精品天堂一级| 国产一区二区三区四区三区四 | 激情小说另类小说亚洲欧美 | 尤物99国产成人精品视频| 国产精品卡一卡二| 欧美日本精品一区二区三区| 久久精品一区中文字幕| 亚洲一区观看| 亚洲蜜桃精久久久久久久| 激情成人在线视频| 国产欧美日韩亚洲| 欧美小视频在线观看| 欧美高清日韩| 久久综合99re88久久爱| 欧美在线一级视频| 亚洲欧美日本精品| 亚洲性夜色噜噜噜7777| 99re6热在线精品视频播放速度| 伊人久久大香线蕉综合热线| 国产精品久久777777毛茸茸| 欧美激情性爽国产精品17p| 久久伊人一区二区| 久久福利毛片| 欧美交受高潮1| 欧美影院视频| 亚洲一区二区精品| 亚洲美女在线视频| 亚洲大胆在线| 国产一区二区三区黄视频| 欧美视频在线免费看| 欧美国产大片| 美日韩精品视频| 久久婷婷丁香| 久久精品夜夜夜夜久久| 欧美一二三视频| 亚洲欧美文学| 亚洲嫩草精品久久| 亚洲一区二区三区四区五区午夜| 日韩视频欧美视频| 亚洲精品孕妇| 亚洲精品乱码久久久久久久久| 亚洲第一天堂无码专区| 影音先锋久久久| 在线看片欧美| 在线观看不卡| 国产视频久久久久久久| 国产精品免费aⅴ片在线观看| 欧美午夜电影在线观看| 欧美日韩在线免费| 欧美视频在线看|