JS循環(huán)發(fā)送請求時控制請求并發(fā)數(shù)實例
更新時間:2023年12月19日 10:14:24 作者:Victory
這篇文章主要介紹了JS循環(huán)發(fā)送請求時控制請求并發(fā)數(shù)實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
準(zhǔn)備數(shù)據(jù),調(diào)用方法
let data = [{ name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }]; LimitFunc(data, service, 2);
屬性注釋
//data:請求所需參數(shù),service:請求回調(diào)名稱,LimitNum 并發(fā)數(shù)量
const LimitFunc = async (data, service, LimitNum) => { const arrList = []; // 所有的promise const running = []; // 正在執(zhí)行的promise for (const item of data) { const p = Promise.resolve(service(item)); // Promise.resolve回調(diào)函數(shù) arrList.push(p); if (LimitNum <= data.length) { // then回調(diào)中,當(dāng)這個promise狀態(tài)變?yōu)閒ulfilled后,將其從正在執(zhí)行的promise列表running中刪除 const e = p.then(() => running.splice(running.indexOf(e), 1)); running.push(e); if (running.length >= LimitNum) { // running的數(shù)量等于限制數(shù)時,Promise.race等待某一個promise狀態(tài)發(fā)生變更, // 變更后,執(zhí)行then的回調(diào),將當(dāng)前promise從running中刪除,從下一次for循環(huán)中生成新的promise進(jìn)入running await Promise.race(running); } } } return Promise.all(arrList); };
axios請求
function service(item) { return new Promise((resolve) => { // axios成功 axios('url', item).then(() => { resolve(); }); }); }
以上就是JS循環(huán)發(fā)送請求時控制請求并發(fā)數(shù)實例的詳細(xì)內(nèi)容,更多關(guān)于JS循環(huán)發(fā)送請求控制并發(fā)數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
require簡單實現(xiàn)單頁應(yīng)用程序(SPA)
下面小編就為大家?guī)硪黄猺equire簡單實現(xiàn)單頁應(yīng)用程序(SPA)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07詳解JS鼠標(biāo)事件中clientX/screenX/offsetX/pageX屬性的區(qū)別
在熟悉業(yè)務(wù)中播放器功能的時候,發(fā)現(xiàn)時間軸上綁定了點擊和拖動事件,頻繁遇到了類似pageX之類的事件屬性,所以本文就來和大家詳細(xì)聊聊clientX/screenX/offsetX/pageX等屬性的區(qū)別吧2024-03-03JavaScript實現(xiàn)精美個性導(dǎo)航欄筋斗云效果
這篇文章主要介紹了JavaScript實現(xiàn)精美個性導(dǎo)航欄筋斗云效果,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-10-10