第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

async函數(shù)塊之間如何同步執(zhí)行?

async函數(shù)塊之間如何同步執(zhí)行?

猛跑小豬 2019-03-29 15:19:51
請(qǐng)問多個(gè)async函數(shù)塊之間如何同步的進(jìn)行執(zhí)行?例子:以下兩個(gè)async函數(shù)塊如何順序進(jìn)行?class Example {    first;    second;    constructor(){    }        async  getFirstVal(){     this.first = await [一個(gè)promise]    }        async  getSecondVal(){    this.second = await[一個(gè)依賴于first的promise]    }        async  getOtherVal(){    this.other = await[一個(gè)promise]    }        doSomeWork(){    this.getFirstVal();     this.getSecondVal();    this.getOtherVal();    ........    }}請(qǐng)問,怎么做才能保證doSomeWork里面的first和second這兩個(gè)異步塊順序執(zhí)行?我不想將second這一部分的邏輯寫入getFirstVal方法中,雖然這樣能獲得正確的執(zhí)行順序,因?yàn)間etFirstVal可能在很多地方都會(huì)異步調(diào)用到,我想將他封裝成一個(gè)單獨(dú)的函數(shù)。請(qǐng)問有什么好的方法幫助我實(shí)現(xiàn)這種async塊之間的順序執(zhí)行嗎?
查看完整描述

2 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

   function async2() {

        console.log( 'async2');

    }

    async function async1(resolve) {

        await setTimeout(function () {

            console.log("settimeout");

            //當(dāng)我認(rèn)定async1完成后才開始async2

            resolve()

        },0);

    }

    new Promise(function (resolve) {

        async1(resolve)

    }).then(function () {

        async2()

    });

或者

new Promise(function (resolve) {

        async1()

        resolve()

    }).then(function () {

        async2()

    });

雖然記得不是很清楚了,但第一種代碼似乎被稱作“Promise構(gòu)造器反模式”,最大的問題是async1拋出的錯(cuò)誤會(huì)被吃掉。

如果我沒有記錯(cuò),是不提倡把resolve泄露出去的,而且不應(yīng)該在構(gòu)造器里出現(xiàn)任何Promise,應(yīng)該.then下去。我見到的最佳實(shí)踐都是構(gòu)造器只包裝老API,不放邏輯。所以這段代碼雖然看起來漲姿勢,我個(gè)人還是覺得值得商榷的。


查看完整回答
反對(duì) 回復(fù) 2019-04-09
  • 2 回答
  • 0 關(guān)注
  • 591 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)