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

发布于 2022-09-07 15:54:57 字数 707 浏览 19 评论 0

请问多个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块之间的顺序执行吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

折戟 2022-09-14 15:54:57
async doSomeWork() {
    await  this.getFirstVal(); 
    this.getSecondVal();
    this.getOtherVal();
}

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

森林散布 2022-09-14 15:54:57
    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()
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文