国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Promise面試題2實(shí)現(xiàn)異步串行執(zhí)行

cikenerd / 2875人閱讀

摘要:按照要求實(shí)現(xiàn)函數(shù),把傳進(jìn)去的函數(shù)數(shù)組按順序先后執(zhí)行,并且把返回的數(shù)據(jù)先后放到數(shù)組中。例子中我們是按順序執(zhí)行的,但是輸出的結(jié)果卻是,對于這些異步函數(shù)來說,并不會按順序執(zhí)行完一個(gè),再執(zhí)行后一個(gè)。

按照要求:
實(shí)現(xiàn) mergePromise 函數(shù),把傳進(jìn)去的函數(shù)數(shù)組按順序先后執(zhí)行,并且把返回的數(shù)據(jù)先后放到數(shù)組 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 => {

// 在這里實(shí)現(xiàn)你的代碼

};

mergePromise([ajax1, ajax2, ajax3]).then(data => {

console.log("done");
console.log(data); // data 為 [1, 2, 3]

});

// 要求分別輸出
// 1
// 2
// 3
// done
// [1, 2, 3]

分析:

timeout是一個(gè)函數(shù),這個(gè)函數(shù)執(zhí)行后返回一個(gè)promise實(shí)例。

ajax1 、ajax2、ajax3 都是函數(shù),不過這些函數(shù)有一些特點(diǎn),執(zhí)行后都會會返回一個(gè) 新的promise實(shí)例。

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

function A() {
setTimeout(function () {

  console.log("a");

}, 3000);
}

function B() {
setTimeout(function () {

  console.log("b");

}, 1000);
}

A();
B();

// b
// a

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

這道題主要考察的是Promise 控制異步流程,我們要想辦法,讓這些函數(shù),一個(gè)執(zhí)行完之后,再執(zhí)行下一個(gè),代碼如何實(shí)現(xiàn)呢?

// 保存數(shù)組中的函數(shù)執(zhí)行后的結(jié)果
var data = [];

// Promise.resolve方法調(diào)用時(shí)不帶參數(shù),直接返回一個(gè)resolved狀態(tài)的 Promise 對象。
var sequence = Promise.resolve();

ajaxArray.forEach(function (item) {

// 第一次的 then 方法用來執(zhí)行數(shù)組中的每個(gè)函數(shù),
// 第二次的 then 方法接受數(shù)組中的函數(shù)執(zhí)行后返回的結(jié)果,
// 并把結(jié)果添加到 data 中,然后把 data 返回。
sequence = sequence.then(item).then(function (res) {
    data.push(res);
    return data;
});

})

// 遍歷結(jié)束后,返回一個(gè) Promise,也就是 sequence, 他的 [[PromiseValue]] 值就是 data,
// 而 data(保存數(shù)組中的函數(shù)執(zhí)行后的結(jié)果) 也會作為參數(shù),傳入下次調(diào)用的 then 方法中。
return sequence;

大概思路如下:全局定義一個(gè)promise實(shí)例sequence,循環(huán)遍歷函數(shù)數(shù)組,每次循環(huán)更新sequence,將要執(zhí)行的函數(shù)item通過sequence的then方法進(jìn)行串聯(lián),并且將執(zhí)行結(jié)果推入data數(shù)組,最后將更新的data返回,這樣保證后面sequence調(diào)用then方法,如何后面的函數(shù)需要使用data只需要將函數(shù)改為帶參數(shù)的函數(shù)。

歡迎轉(zhuǎn)發(fā)、關(guān)注、點(diǎn)擊好看。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/102171.html

相關(guān)文章

  • js異步從入門到放棄(實(shí)踐篇) — 常見寫法&面試解析

    摘要:前文該系列下的前幾篇文章分別對不同的幾種異步方案原理進(jìn)行解析,本文將介紹一些實(shí)際場景和一些常見的面試題。流程調(diào)度里比較常見的一種錯(cuò)誤是看似串行的寫法,可以感受一下這個(gè)例子判斷以下幾種寫法的輸出結(jié)果辨別輸出順序這類題目一般出現(xiàn)在面試題里。 前文 該系列下的前幾篇文章分別對不同的幾種異步方案原理進(jìn)行解析,本文將介紹一些實(shí)際場景和一些常見的面試題。(積累不太夠,后面想到再補(bǔ)) 正文 流程調(diào)度...

    Awbeci 評論0 收藏0
  • Promise使用細(xì)節(jié)

    摘要:應(yīng)用把一個(gè)異步操作和定時(shí)器放在一起。如果定時(shí)器先觸發(fā)就提示用戶超時(shí)用戶超時(shí)什么是值穿透或者期望傳入一個(gè)函數(shù)如果不是函數(shù)會發(fā)生值穿透和的第二個(gè)參數(shù)的區(qū)別比較類似是一個(gè)語法糖相當(dāng)于還有一點(diǎn)區(qū)別就是如果第一個(gè)報(bào)錯(cuò)第二個(gè)無法捕獲。 Promise使用細(xì)節(jié) 使用promise需要注意的幾點(diǎn): 1.如何用promise實(shí)現(xiàn)并行的異步 (Promise.all配合.map) Promise.all...

    fnngj 評論0 收藏0
  • 帝都寒冬一年經(jīng)驗(yàn)前端面試總結(jié)

    摘要:不過幸運(yùn)的是所有面試的公司都給了,在這里總結(jié)下經(jīng)驗(yàn)吧。這里推薦下我當(dāng)時(shí)看的一篇的面經(jīng),木易楊老師寫的大廠高級前端面試題匯總。 前言 本人畢業(yè)一年,最近陸續(xù)面試了頭條、瓜子、360、猿輔導(dǎo)、中信銀行、老虎等公司,由于最近比較寒冬而且招1-3年的并不多,再加上自己對公司規(guī)模和位置有一定要求,所以最后合適的也就這幾家了。不過幸運(yùn)的是所有面試的公司都給了offer,在這里總結(jié)下經(jīng)驗(yàn)吧。掘金:h...

    Scott 評論0 收藏0
  • JavaScript 異步隊(duì)列及Co實(shí)現(xiàn)

    摘要:在中,又由于單線程的原因,異步編程又是非常重要的。方法有很多,,,觀察者,,,這些中處理異步編程的,都可以做到這種串行的需求。 引入 隊(duì)列對于任何語言來說都是重要的,io 的串行,請求的并行等等。在 JavaScript 中,又由于單線程的原因,異步編程又是非常重要的。昨天由一道面試題的啟發(fā),我去實(shí)現(xiàn) JS 中的異步隊(duì)列的時(shí)候,借鑒了 express 中間件思想,并發(fā)散到 co 實(shí)現(xiàn) ...

    LdhAndroid 評論0 收藏0
  • 用一道大廠面試帶你搞懂事件循環(huán)機(jī)制

    本文涵蓋 面試題的引入 對事件循環(huán)面試題執(zhí)行順序的一些疑問 通過面試題對微任務(wù)、事件循環(huán)、定時(shí)器等對深入理解 結(jié)論總結(jié) 面試題 面試題如下,大家可以先試著寫一下輸出結(jié)果,然后再看我下面的詳細(xì)講解,看看會不會有什么出入,如果把整個(gè)順序弄清楚 Node.js 的執(zhí)行順序應(yīng)該就沒問題了。 async function async1(){ console.log(async1 start) ...

    ShowerSun 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<