亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Promise中怎么實現異步串行執行

發布時間:2021-08-09 11:57:19 來源:億速云 閱讀:253 作者:Leah 欄目:大數據

本篇文章為大家展示了Promise中怎么實現異步串行執行,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

按照要求:

實現 mergePromise 函數,把傳進去的函數數組按順序先后執行,并且把返回的數據先后放到數組 data 中。

代碼如下:

const timeout = ms => new Promise((resolve, reject) => {    setTimeout(() => {        resolve();    }, ms);});
const ajax1 = () => timeout(2000).then(() => {    console.log('1');    return 1;});
const ajax2 = () => timeout(1000).then(() => {    console.log('2');    return 2;});
const ajax3 = () => timeout(2000).then(() => {    console.log('3');    return 3;});
const mergePromise = ajaxArray => {    // 在這里實現你的代碼
};
mergePromise([ajax1, ajax2, ajax3]).then(data => {    console.log('done');    console.log(data); // data 為 [1, 2, 3]});
// 要求分別輸出// 1// 2// 3// done// [1, 2, 3]

分析: 

timeout是一個函數,這個函數執行后返回一個promise實例。

 ajax1 、ajax2、ajax3 都是函數,不過這些函數有一些特點,執行后都會會返回一個 新的promise實例。

按題目的要求我們只要順序執行這三個函數就好了,然后把結果放到 data 中,但是這些函數里都是異步操作,想要按順序執行,然后輸出 1,2,3并沒有那么簡單,看個例子。

function A() {  setTimeout(function () {      console.log('a');  }, 3000);}
function B() {  setTimeout(function () {      console.log('b');  }, 1000);}
A();B();
// b// a

例子中我們是按順序執行的 A,B 但是輸出的結果卻是 b,a 對于這些異步函數來說,并不會按順序執行完一個,再執行后一個。 

這道題主要考察的是Promise 控制異步流程,我們要想辦法,讓這些函數,一個執行完之后,再執行下一個,代碼如何實現呢?

// 保存數組中的函數執行后的結果var data = [];
// Promise.resolve方法調用時不帶參數,直接返回一個resolved狀態的 Promise 對象。var sequence = Promise.resolve();
ajaxArray.forEach(function (item) {    // 第一次的 then 方法用來執行數組中的每個函數,    // 第二次的 then 方法接受數組中的函數執行后返回的結果,    // 并把結果添加到 data 中,然后把 data 返回。    sequence = sequence.then(item).then(function (res) {        data.push(res);        return data;    });})
// 遍歷結束后,返回一個 Promise,也就是 sequence, 他的 [[PromiseValue]] 值就是 data,// 而 data(保存數組中的函數執行后的結果) 也會作為參數,傳入下次調用的 then 方法中。return sequence;

大概思路如下:全局定義一個promise實例sequence,循環遍歷函數數組,每次循環更新sequence,將要執行的函數item通過sequence的then方法進行串聯,并且將執行結果推入data數組,最后將更新的data返回,這樣保證后面sequence調用then方法,如何后面的函數需要使用data只需要將函數改為帶參數的函數。

上述內容就是Promise中怎么實現異步串行執行,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

水城县| 怀来县| 西平县| 潮州市| 新野县| 肥东县| 博客| 沾益县| 肇源县| 柯坪县| 象山县| 郴州市| 定西市| 乌鲁木齐县| 沽源县| 齐齐哈尔市| 郧西县| 蒲江县| 金沙县| 丹棱县| 紫云| 湟源县| 扎囊县| 出国| 新源县| 宁远县| 葫芦岛市| 喀喇| 武定县| 通许县| 阿图什市| 当阳市| 曲阜市| 阜宁县| 宁陕县| 西华县| 淳化县| 香河县| 濮阳县| 察雅县| 乌兰浩特市|