最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于promise.all()的使用及說明

 更新時(shí)間:2023年04月25日 09:15:09   作者:微笑的魚_  
這篇文章主要介紹了關(guān)于promise.all()的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

關(guān)于promise.all()的使用

Promise.all可以將多個(gè)Promise實(shí)例包裝成一個(gè)新的Promise實(shí)例。

同時(shí),成功和失敗的返回值是不同的,成功的時(shí)候返回的是一個(gè)結(jié)果數(shù)組,而失敗的時(shí)候則返回最先被reject失敗狀態(tài)的值。

關(guān)鍵代碼:將所有異步操作存儲(chǔ)到數(shù)組pros中,Promise.all(pros)執(zhí)行所有異步操作

let pros = []
data.forEach(element => {
?? ?pros.push( this.getJsonFile(element.json,element.fileName) )
});
Promise.all(pros).then(val => {
?? ?this.fontsList = [...val]
})

示例:

// 獲取字體所有json文件展示
getIconFonts(isFresh) {
?? ?req.post(window.context.uc+`/system/file/v1/queryIconFiles`).then(rep => {
?? ??? ?if(rep && rep.data) {
?? ??? ??? ?// 將所有異步操作存儲(chǔ)到數(shù)組pros中
?? ??? ??? ?let pros = []
?? ??? ??? ?data.forEach(element => {
?? ??? ??? ??? ?pros.push( this.getJsonFile(element.json,element.fileName) )
?? ??? ??? ?});
?? ??? ??? ?// 執(zhí)行所有異步操作后處理數(shù)據(jù)
?? ??? ??? ?Promise.all(pros).then(val => {
?? ??? ??? ??? ?this.fontsList = [...val]
?? ??? ??? ??? ?this.uploadFonts = [...this.fontsList]
?? ??? ??? ?})
?? ??? ?}
?? ?});
},
// 通過id獲取json文件
getJsonFile(fileId, fileName) {
?? ?return new Promise((resolve, reject) => {
?? ??? ?req.get(window.context.uc +'/system/file/v1/preview?fileId=' + fileId).then(rep => {
?? ??? ??? ?if(rep && rep.data) {
?? ??? ??? ??? ?let data = {
?? ??? ??? ??? ??? ?fileName,
?? ??? ??? ??? ??? ?...rep.data
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// 返回處理后的數(shù)據(jù)
?? ??? ??? ??? ?resolve(data)
?? ??? ??? ?}
?? ??? ?})
?? ?})
}

Promise.all實(shí)現(xiàn)限制并發(fā)請(qǐng)求函數(shù)

Promise.all 的簡單解釋

// 當(dāng)以下數(shù)組中promise1, promise2, promise3都resolve之后,觸發(fā)promise.all的then函數(shù)。
Promise.all([promise1, promise2, promise3]).then((values) => {
? console.log(values);
});

需求解釋

所謂并發(fā)請(qǐng)求,即有待請(qǐng)求接口100個(gè),限制每次只能發(fā)出10個(gè)。即同一時(shí)刻最多有10個(gè)正在發(fā)送的請(qǐng)求。

每當(dāng)10個(gè)之中有一個(gè)請(qǐng)求完成,則從待請(qǐng)求的接口中再取出一個(gè)發(fā)出。保證當(dāng)前并發(fā)度仍舊為10。

直至最終請(qǐng)求完成。

設(shè)計(jì)思路

簡單思路如下:(假設(shè)并發(fā)請(qǐng)求函數(shù)名字為limitedRequest)

  • 設(shè)定一個(gè)數(shù)組(命名為:pool),用于后續(xù)Promise.all的使用
  • 當(dāng)limitedRequest被調(diào)用的時(shí)候,首先一次性發(fā)出10個(gè)請(qǐng)求,并放入到pool中
  • 每一個(gè)請(qǐng)求完成后的回調(diào)函數(shù)中繼續(xù)觸發(fā)下一個(gè)請(qǐng)求,而下一個(gè)請(qǐng)求返回Promise,他的回調(diào)函數(shù)繼續(xù)綁定同樣的回調(diào)函數(shù),即循環(huán)調(diào)用。(看不懂就直接看代碼更易懂)
  • 直到全部請(qǐng)求完成,停止。

代碼實(shí)現(xiàn)

具體代碼如下

// 模仿一個(gè)fetch的異步函數(shù),返回promise
function mockFetch(param) {
? return new Promise((resovle) => {
? ? setTimeout(() => {
? ? ? resovle(param);
? ? }, 2000);
? });
}

function limitedRequest(urls, maxNum) {
? const pool = [];
? // 處理maxNum比urls.length 還要大的情況。
? const initSize = Math.min(urls.length, maxNum);
? for (let i = 0; i < initSize; i++) {
? ?? ?// 一次性放入初始的個(gè)數(shù)
? ? pool.push(run(urls.splice(0, 1)));
? }
? // r 代表promise完成的resolve回調(diào)函數(shù)
? // r 函數(shù)無論什么樣的結(jié)果都返回promise,來確保最終promise.all可以正確執(zhí)行
? function r() {
? ? console.log('當(dāng)前并發(fā)度:', pool.length);
? ? if (urls.length === 0) {
? ? ? console.log('并發(fā)請(qǐng)求已經(jīng)全部發(fā)起');
? ? ? return Promise.resolve();
? ? }
? ? return run(urls.splice(0, 1));
? }
? // 調(diào)用一次請(qǐng)求
? function run(url) {
? ? return mockFetch(url).then(r);
? }
? // 全部請(qǐng)求完成的回調(diào)
? Promise.all(pool).then(() => {
? ? console.log('請(qǐng)求已經(jīng)全部結(jié)束');
? });
}
// 函數(shù)調(diào)用
limitedRequest([1, 2, 3, 4, 5, 6, 7, 8], 3);

# 最終返回結(jié)果
$ node .\src\views\doc\detail\index.js
當(dāng)前并發(fā)度: 3
當(dāng)前并發(fā)度: 3
當(dāng)前并發(fā)度: 3
當(dāng)前并發(fā)度: 3
當(dāng)前并發(fā)度: 3
當(dāng)前并發(fā)度: 3
并發(fā)請(qǐng)求已經(jīng)全部發(fā)起
當(dāng)前并發(fā)度: 3
并發(fā)請(qǐng)求已經(jīng)全部發(fā)起
當(dāng)前并發(fā)度: 3
并發(fā)請(qǐng)求已經(jīng)全部發(fā)起
請(qǐng)求已經(jīng)全部結(jié)束

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • element-ui 的el-button組件中添加自定義顏色和圖標(biāo)的實(shí)現(xiàn)方法

    element-ui 的el-button組件中添加自定義顏色和圖標(biāo)的實(shí)現(xiàn)方法

    這篇文章主要介紹了element-ui 的el-button組件中添加自定義顏色和圖標(biāo)的實(shí)現(xiàn)方法,目前的解決方案是:添加一個(gè)自定義全局指令,同時(shí)在element-ui源碼中,加入對(duì)應(yīng)的組件。需要的朋友跟隨小編一起看看吧
    2018-10-10
  • 如何利用js實(shí)時(shí)監(jiān)聽input輸入框值的變化

    如何利用js實(shí)時(shí)監(jiān)聽input輸入框值的變化

    在做web開發(fā)時(shí)候很多時(shí)候都需要即時(shí)監(jiān)聽輸入框值的變化,以便作出即時(shí)動(dòng)作去引導(dǎo)瀏覽者增強(qiáng)網(wǎng)站的用戶體驗(yàn)感,這篇文章主要給大家介紹了關(guān)于如何利用js實(shí)時(shí)監(jiān)聽input輸入框值的變化,需要的朋友可以參考下
    2024-02-02
  • JS定義函數(shù)的幾種常用方法小結(jié)

    JS定義函數(shù)的幾種常用方法小結(jié)

    這篇文章主要介紹了JS定義函數(shù)的幾種常用方法,結(jié)合實(shí)例形式總結(jié)分析了javascript函數(shù)表達(dá)式、Lambda 表達(dá)式、對(duì)象方法等常見函數(shù)定義操作技巧,需要的朋友可以參考下
    2019-05-05
  • JavaScript滑移效果代碼

    JavaScript滑移效果代碼

    這里說的滑移其實(shí)就是減速效果,能根據(jù)設(shè)定的坐標(biāo)平面移動(dòng)。
    2008-09-09
  • 編寫高性能JavaScript(譯)

    編寫高性能JavaScript(譯)

    本文主要關(guān)注V8的性能優(yōu)化,部分內(nèi)容并不適用于所有JS引擎。最后,轉(zhuǎn)載請(qǐng)注明出處
    2014-08-08
  • 詳解ES6 Promise的生命周期和創(chuàng)建

    詳解ES6 Promise的生命周期和創(chuàng)建

    這篇文章主要介紹了詳解ES6 Promise Promise的生命周期和創(chuàng)建,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JavaScript實(shí)現(xiàn)九宮格移動(dòng)拼圖游戲

    JavaScript實(shí)現(xiàn)九宮格移動(dòng)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)九宮格移動(dòng)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • js使用highlight.js高亮你的代碼

    js使用highlight.js高亮你的代碼

    本篇文章主要介紹了js使用highlight.js高亮你的代碼 ,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-08-08
  • Javascript 對(duì)cookie操作詳解及實(shí)例

    Javascript 對(duì)cookie操作詳解及實(shí)例

    這篇文章主要介紹了Javascript 對(duì)cookie操作詳解及實(shí)例的相關(guān)資料,大家在開發(fā)網(wǎng)站的時(shí)候,都會(huì)用到cookie 這里就詳細(xì)介紹下,需要的朋友可以參考下
    2016-12-12
  • 基于JavaScript實(shí)現(xiàn)在新的tab頁打開url

    基于JavaScript實(shí)現(xiàn)在新的tab頁打開url

    這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)在新的tab頁打開url 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08

最新評(píng)論

阳原县| 阿巴嘎旗| 河池市| 山东省| 博乐市| 柳河县| 确山县| 九寨沟县| 广东省| 墨江| 扎兰屯市| 富锦市| 溧阳市| 新安县| 西峡县| 福安市| 宁晋县| 吉隆县| 蕲春县| 蚌埠市| 林口县| 永嘉县| 锡林浩特市| 福建省| 买车| 蓬安县| 浮梁县| 凌源市| 北安市| 荣昌县| 泰兴市| 申扎县| 桦川县| 万盛区| 遵化市| 南阳市| 宜川县| 农安县| 岳阳市| 浪卡子县| 古田县|