首页 > 解决方案 > 等待函数,但让它们同步,然后调用最后一个函数

问题描述

所以我正在使用 Vue、Node 和 typescript。我正在获取我所有其他功能都需要的数据,因此getDataForFunction123()需要等待并且很好。

然后我有 3 个函数可以获取不同的东西,而不是相互依赖。但是所有答案都由最后一个函数使用updateAfterFunction123IsDone()。但是当我现在拥有它时,我们需要等待函数 1、2 和 3 的同步。这需要很多时间。我想让功能 1、2 和 3 同时做一些事情,但也想知道所有 3 什么时候完成,然后调用updateAfterFunction123IsDone().

这是代码:

async initData () {
  await this.getDataForFunction123();

  await this.function1();
  await this.function2();
  await this.function3();

  this.updateAfterFunction123IsDone();
}

我认为Promise.all()不会解决这个问题?因为它也是按顺序而不是同时执行功能?正确的?这不会节省我的时间,但会节省一些错误处理?

标签: javascriptvue.jsasync-awaitvue-componentes6-promise

解决方案


Promise.all一旦它的所有承诺都得到解决,就会触发。因此,立即运行所有函数function1, , ,然后在它们的承诺得到解决后继续:function2function3await

async initData () {
  await this.getDataForFunction123();

  const p1 = this.function1();
  const p2 = this.function2();
  const p3 = this.function3();

  await Promise.all([p1, p2, p3]);
  this.updateAfterFunction123IsDone();
}

推荐阅读