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

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

 更新時(shí)間:2023年04月25日 09:15:09   作者:微笑的魚_  
這篇文章主要介紹了關(guān)于promise.all()的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(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ā)請求函數(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ā)請求,即有待請求接口100個(gè),限制每次只能發(fā)出10個(gè)。即同一時(shí)刻最多有10個(gè)正在發(fā)送的請求。

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

直至最終請求完成。

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

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

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

代碼實(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ā)請求已經(jīng)全部發(fā)起');
? ? ? return Promise.resolve();
? ? }
? ? return run(urls.splice(0, 1));
? }
? // 調(diào)用一次請求
? function run(url) {
? ? return mockFetch(url).then(r);
? }
? // 全部請求完成的回調(diào)
? Promise.all(pool).then(() => {
? ? console.log('請求已經(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ā)請求已經(jīng)全部發(fā)起
當(dāng)前并發(fā)度: 3
并發(fā)請求已經(jīng)全部發(fā)起
當(dāng)前并發(fā)度: 3
并發(fā)請求已經(jīng)全部發(fā)起
請求已經(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源碼中,加入對應(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á)式、對象方法等常見函數(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)載請注明出處
    2014-08-08
  • 詳解ES6 Promise的生命周期和創(chuàng)建

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

    這篇文章主要介紹了詳解ES6 Promise Promise的生命周期和創(chuàng)建,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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 對cookie操作詳解及實(shí)例

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

    這篇文章主要介紹了Javascript 對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

最新評論

宝兴县| 英吉沙县| 闸北区| 兰州市| 张家川| 栾川县| 宁津县| 临朐县| 河池市| 钦州市| 舞钢市| 垦利县| 沈丘县| 台安县| 大名县| 嘉黎县| 楚雄市| 东山县| 新营市| 赞皇县| 和硕县| 静海县| 合江县| 白城市| 中江县| 洪洞县| 保山市| 砀山县| 当雄县| 邯郸市| 凤山县| 瓮安县| 玉田县| 全椒县| 阳东县| 青岛市| 石渠县| 乌兰察布市| 通辽市| 宜兴市| 邻水|