为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2019-03-29 15:19:51
请问多个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块之间的顺序执行吗?
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

   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,不放逻辑。所以这段代码虽然看起来涨姿势,我个人还是觉得值得商榷的。


查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 580 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信