async函数块之间如何同步执行?

请问多个async函数块之间如何同步的进行执行?

例子:以下两个async函数块如何顺序进行?


class Example {

    first;

    second;

    constructor(){

    }

    

    async  getFirstVal(){

     this.first = await [一个promise]

    }

    

    async  getSecondVal(){

    this.second = await[一个依赖于first的promise]

    }

    

    async  getOtherVal(){

    this.other = await[一个promise]

    }

    

    doSomeWork(){

    this.getFirstVal(); 

    this.getSecondVal();

    this.getOtherVal();

    ........

    }

}

请问,怎么做才能保证doSomeWork里面的first和second这两个异步块顺序执行?

我不想将second这一部分的逻辑写入getFirstVal方法中,虽然这样能获得正确的执行顺序,因为getFirstVal可能在很多地方都会异步调用到,我想将他封装成一个单独的函数。请问有什么好的方法帮助我实现这种async块之间的顺序执行吗?


猛跑小猪
浏览 581回答 2
2回答

繁星淼淼

   function async2() {        console.log( 'async2');    }    async function async1(resolve) {        await setTimeout(function () {            console.log("settimeout");            //当我认定async1完成后才开始async2            resolve()        },0);    }    new Promise(function (resolve) {        async1(resolve)    }).then(function () {        async2()    });或者new Promise(function (resolve) {        async1()        resolve()    }).then(function () {        async2()    });虽然记得不是很清楚了,但第一种代码似乎被称作“Promise构造器反模式”,最大的问题是async1抛出的错误会被吃掉。如果我没有记错,是不提倡把resolve泄露出去的,而且不应该在构造器里出现任何Promise,应该.then下去。我见到的最佳实践都是构造器只包装老API,不放逻辑。所以这段代码虽然看起来涨姿势,我个人还是觉得值得商榷的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript