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

野生爬山虎
  • 131

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

评论
阅读 4.6k
2 个回答
✓ 已被采纳
async doSomeWork() {
    await  this.getFirstVal(); 
    this.getSecondVal();
    this.getOtherVal();
}

这样可以吗?优雅的方案也没太研究过,但是你可以 看看 Rxjs 或者 async 这些库,能得到比较好的思路

    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()
    });
宣传栏