日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何基于JS實現(xiàn)Ajax并發(fā)請求的控制詳解

瀏覽:182日期:2024-05-31 09:02:21
目錄前言Ajax的串行與并行Ajax的并發(fā)請求控制的兩大解決方案基于Promise遞歸實現(xiàn)基于Class實現(xiàn)代碼展示總結前言

最近看到一個面試題,當然了,就是這篇文章的標題,Ajax的并發(fā)請求的控制,感覺挺有意思的,在社區(qū)看了下,應該是字節(jié)的面試題,也挺多大佬對這個進行了總結,都看了下,于是自己也想試著總結下,代碼文末會全部貼出,如有不足,請指出!

Ajax的串行與并行 串行:一般業(yè)務需求是下個接口需要用到上個接口的返回的數(shù)據(jù),前端常用的請求庫是Axios,本身就是基于Promise的HTTP庫,我們直接采用鏈式調用,或者采用Async Await 的方式就可以實現(xiàn),就不做演示了 并行:就是多個請求同時發(fā)生,一般情況會用于當所有數(shù)據(jù)都拿到后進行渲染頁面,或者其他的操作,主要還是基于Promise.all實現(xiàn)方式如下

如何基于JS實現(xiàn)Ajax并發(fā)請求的控制詳解

上面模擬實現(xiàn)了基于Promise.all的并行操作,打印結果入下

如何基于JS實現(xiàn)Ajax并發(fā)請求的控制詳解

是不是覺得的這就結束了,不存在的?接下來才是正菜,我們試想有種情況,一個頁面中需要同時發(fā)送上萬個請求,全部成功后再去做一些操作,這樣會導致什么后果呢?代碼無法執(zhí)行,內存溢出,哎~這個時候就回到了我們文章的主題上了,如何對Ajax并發(fā)請求的控制呢?我讓他一次性只能輸出一定數(shù)量的請求,直到所有的都成功為止,接下來我將用兩種方法實現(xiàn)這個操作,望讀者朋友們不吝賜教

Ajax的并發(fā)請求控制的兩大解決方案基于Promise遞歸實現(xiàn)

以下的兩種方法都是需要用到上圖中的那個Tasks數(shù)組的,請大家記住它,第一中基于Promise的方法,大致思路是:當你傳入一個并發(fā)量pool時,會創(chuàng)建pool個工作區(qū),每一個工作區(qū)回去拿對應的任務(請求)去執(zhí)行,成功后保存,然后繼續(xù)去拿任務(請求),直到工作區(qū)沒有任務了,當然了,失敗直接終止, 大致思路就是這樣,下面我對每一行代碼進行了注釋,請笑納

如何基于JS實現(xiàn)Ajax并發(fā)請求的控制詳解

基于Class實現(xiàn)

第二種方法是基于Class來實現(xiàn)的,和上面的區(qū)別在于這個只創(chuàng)造一個工作區(qū),大致思路:創(chuàng)建一個工作區(qū)用于執(zhí)行任務(請求),然后將所有任務都推入,但是沒次只能執(zhí)行對應的并發(fā)數(shù),當小于并發(fā)數(shù)市,繼續(xù)去拿任務執(zhí)行它,直到?jīng)]有任務(請求)為止, 就是這樣,下面是具體實現(xiàn)

如何基于JS實現(xiàn)Ajax并發(fā)請求的控制詳解

代碼展示

這里把這兩種方法的實現(xiàn)代碼貼出

const delay = function delay(interval) { return new Promise((res,rej) => {setTimeout(() => { res(interval)}, interval); }) } let tasks = [() => { return delay(1000) },() => { return delay(1003) },() => { return delay(1005) },() => { return delay(1002) },() => { return delay(1004) },() => { return delay(1006) }] // 通過Promise.all實現(xiàn)并行 Promise.all(tasks.map(task => task())).then(res => { console.log(res); }) // 基于Promise實現(xiàn) function creatRequest(tasks,pool) { // 每次控制的發(fā)送請求的數(shù)量pool pool = pool || 5 // 用于存儲每一次請求的結果(按順序進行存貯) let results = [], // together 用于創(chuàng)建工作區(qū),當pool傳入的是幾,我們就對應的創(chuàng)建幾個工作區(qū) // 也就是創(chuàng)建一個長度為pool且值為null的一個數(shù)組 together = new Array(pool).fill(null), // index為每次獲取的任務值 index = 0; together = together.map(() => {// 基于Promise進行管理return new Promise((resolve,reject) => { // 創(chuàng)建一個函數(shù),進來立刻執(zhí)行 const run = function run() { // 如果任務池已經(jīng)空了,說明請求發(fā)送完成了,直接成功 if(index >= tasks.length) { resolve() return } // 先將index保存一下用于存儲當前成功請求的結果 let old_index = index, // 獲取當前發(fā)送的請求,然后把index進行累加,所以上面會把index保存起來 // 這里index++ 是先運算后累加的,而++index則相反,先累加后運算task = tasks[index++]; // 執(zhí)行請求 task().then(result => { // 將成功結果保存 results[old_index] = result // 遞歸繼續(xù)執(zhí)行,也就是繼續(xù)拿到任務到工作區(qū)執(zhí)行 run(); }).catch(reason => { reject(reason) }) } // 立即執(zhí)行 run()}) }) // 用Promise.all管控工作區(qū),也就是每次并發(fā)兩個請求 return Promise.all(together).then(() => results) } creatRequest(tasks,2).then(results => { // 都成功,整體才成功,按順序存儲結果 console.log(’成功’,results); }).catch(resolve => { // 只要有一個失敗,整體失敗 console.log(’失敗’); }) // 基于Class實現(xiàn) function creatRequest(tasks,pool,callback) { // 參數(shù)的限制與驗證 if(typeof pool === ’function’) {callback = pool;pool = 5 } if(typeof pool !== ’number’) pool = 5 if(typeof callback !== ’function’) callback = function () {} // ------- class TaskQueue {// 正在運行的個數(shù)runing = 0;// 將所有任務所存在的隊列queue = [];// 存儲執(zhí)行任務(請求)的結果results = [];pushTask(task) { let self = this // 將任務推入工作區(qū) self.queue.push(task) // 執(zhí)行發(fā)送請求的邏輯 self.next()}next() { let self = this // 當正在執(zhí)行的任務數(shù)小于并發(fā)量的時候繼續(xù)去拿任務執(zhí)行 while(self.runing < pool && self.queue.length) { self.runing++; // 相當于拿一個任務刪除一個任務 let task = self.queue.shift(); // 執(zhí)行請求 task().then(result => { // 將執(zhí)行結果保存 self.results.push(result) }).finally(() => { // 將正在運行的個數(shù)清除 self.runing-- // 繼續(xù)執(zhí)行請求 self.next() }) } // 當沒有任務了循環(huán)結束 if(self.runing === 0) callback(self.results)} } // 實例化 let TQ = new TaskQueue() tasks.forEach(task => TQ.pushTask(task)) } creatRequest(tasks,2,results=> { console.log(results); })總結

以上就是對這套面試題的總結了,也是自己做下記錄,后續(xù)會不斷的更新前端方面的文章,最后還是希望各位前端的小伙伴們都能堅持學習,技術不斷提升,加油吧,騷年!??!

到此這篇關于如何基于JS實現(xiàn)Ajax并發(fā)請求控制的文章就介紹到這了,更多相關JS實現(xiàn)Ajax并發(fā)請求控制內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黑人精品一区| 欧美日韩视频免费观看| 亚洲欧美日韩国产一区| 国产亚洲精品v| 亚洲最新av| 欧美日韩精品一区二区三区视频 | 国产乱子精品一区二区在线观看 | 日韩精品中文字幕一区二区| 视频一区中文字幕精品| 日韩高清一区二区| 麻豆91精品视频| 99久久九九| 日韩精品一级中文字幕精品视频免费观看| 一二三区精品| 国产精品一区二区av交换| 国产一区二区三区国产精品| 欧美日韩精品在线一区| 久久亚洲欧美| 欧美精品1区| 成人精品中文字幕| 宅男在线一区| 日韩美女精品| 欧美少妇精品| 亚洲日本三级| 9999国产精品| 深夜日韩欧美| 国产成人精品三级高清久久91| 日韩中文首页| 每日更新成人在线视频| 欧美黑人做爰爽爽爽| 亚洲a一区二区三区| 免费一级片91| 精品国产乱码| 一区二区三区网站| 福利一区二区三区视频在线观看| 在线视频日韩| 国产一区二区三区不卡av| 亚洲精品网址| 国产乱子精品一区二区在线观看| 日韩免费小视频| 日韩精品亚洲专区| 久久一区二区三区电影| 日本aⅴ精品一区二区三区| 亚洲欧洲美洲av| 午夜久久av | 夜夜精品视频| 福利一区二区三区视频在线观看| 视频一区二区中文字幕| 国产精品蜜芽在线观看| 日韩极品在线观看| 极品裸体白嫩激情啪啪国产精品| 国产精品色婷婷在线观看| 91久久久久| 麻豆网站免费在线观看| 日本中文字幕一区二区视频| av高清不卡| 国产精品v亚洲精品v日韩精品| 亚洲午夜黄色| 国产99在线| 国产精品主播在线观看| 亚洲欧美日韩专区| www成人在线视频| 久久99久久人婷婷精品综合| 一区二区国产在线观看| 五月天久久网站| 综合日韩av| 免费在线亚洲欧美| 日韩av电影一区| 亚洲一二av| 国产亚洲福利| 三级在线看中文字幕完整版| 国产精品第十页| 日本久久二区| 日韩三级精品| 亚洲三级观看| 亚洲ww精品| 免费成人在线视频观看| 亚洲国产成人精品女人| 久久狠狠婷婷| 中文在线а√天堂| 国产成人精品亚洲线观看| 国产精品一区2区3区| 日韩欧美精品一区二区综合视频| 中文一区一区三区免费在线观 | 美女尤物国产一区| 国产色99精品9i| 欧美日韩1区2区3区| 日韩三级精品| 日韩极品在线观看| 日韩高清在线一区| 国产欧美日韩影院| 国产精品成人自拍| 国产一区二区三区亚洲| 久久精品国产999大香线蕉| 国产免费久久| 麻豆精品99| 精品美女久久| 日韩免费视频| 国产中文一区| 中文在线一区| 亚洲综合小说| 久久国产精品色av免费看| 国产精品欧美一区二区三区不卡| 久久久久黄色| 日韩和的一区二在线| 欧美一区二区三区高清视频| 99riav1国产精品视频| 久久国产精品99国产| 蜜臀a∨国产成人精品| 亚洲精品进入| 国产精品久久久久久久免费软件| 久久精品亚洲| www成人在线视频| 伊人影院久久| 日韩国产欧美一区二区三区| 老鸭窝一区二区久久精品| 欧美好骚综合网| 99成人在线视频| 亚洲午夜免费| 久久精品一区二区国产| 99精品在线免费在线观看| 中文国产一区| 欧美日韩亚洲一区三区| 欧美国产中文高清| 日韩精品麻豆| 亚洲精品免费观看| 久久不见久久见免费视频7| 日韩精品网站| 亚洲久草在线| 国产精品久久久久久久久妇女| 免费视频亚洲| 国产精品久久久久久久久久妞妞| 中国字幕a在线看韩国电影| 欧美特黄一区| 国产精品日韩精品在线播放| 群体交乱之放荡娇妻一区二区| 日韩中文字幕一区二区三区| 久久国产生活片100| 日本精品不卡| 爽好久久久欧美精品| 国产精品qvod| 午夜视频精品| 狂野欧美性猛交xxxx| av成人国产| 精品高清久久| 日韩中文字幕区一区有砖一区| 国产精品极品| 在线视频精品| 精品网站999| 亚洲狼人精品一区二区三区| 国精品产品一区| 亚洲我射av| 日韩欧美在线中字| 欧美私人啪啪vps| av资源亚洲| 青草综合视频| 狠狠爱www人成狠狠爱综合网| 国产精品成人一区二区网站软件| 99国产精品久久久久久久| 国内揄拍国内精品久久| 中文字幕亚洲精品乱码| 日韩三区免费| 久久精品国产一区二区| 一二三区精品| 久久精品国产亚洲夜色av网站 | 精品久久91| 视频一区欧美精品| 亚洲伦乱视频| 国产精品115| 亚洲精品伦理| 在线国产一区二区| 日韩中文首页| 久久精品九色| 欧美影院视频| 中文字幕视频精品一区二区三区| 999精品色在线播放| 久草精品视频| 国产亚洲电影| 日韩精选在线| 美美哒免费高清在线观看视频一区二区| 97精品视频在线看| 精品视频自拍| 国产精品va| 国产日韩亚洲| 日韩一区二区三区精品视频第3页| 欧美高清一区| 久久九九国产| 日韩欧美综合| 日韩精品第一区| 日韩1区在线| 国产一区二区三区视频在线| 国产精品欧美在线观看| 日本视频中文字幕一区二区三区| 免费一级片91| 亚洲一级大片| 99国产精品自拍| 91久久亚洲| 免费精品视频| 蜜桃久久精品一区二区| 亚洲自拍另类|