在多个异步函数之后同步执行函数

时间:2018-10-28 05:57:36

标签: typescript asynchronous

我有3种异步打字稿方法,如下所述,它们将并行执行。我想在所有三个函数完成执行后执行最后一个函数。我该怎么陪。

this.getTimeLecs(prevTimeStartStr , nowTimeStartStr).then((result) => {
  // console.log(result);
  this.previousData = result;
});
this.getTimeLecs(nowTimeStartStr, nextTimeStartStr).then((result) =>{
  this.currentData = result;
});
this.getTimeLecs(nextTimeStartStr , nextTimeEnd ),then(result) => {
  this.nextData = result;
};
finalFunction();

2 个答案:

答案 0 :(得分:1)

使用async/await可以实现。

export class AsyncAwaitExample {
  constructor() {
  }
  getTimeLecs(str1, str2) {
    return Promise.resolve(str1 + ":" + str2).then(v => console.log(v));
  }
  async getTimeALL() {
    await Promise.all([
      this.getTimeLecs(10, 20),
      this.getTimeLecs(20, 30),
      this.getTimeLecs(30, 40)]
    );
    this.finalCall();
  }
  finalCall() {
    console.log('final call');
  }
}

let example = new AsyncAwaitExample();
example.getTimeALL();

这里

 await Promise.all([
          this.getTimeLecs(10, 20),
          this.getTimeLecs(20, 30),
          this.getTimeLecs(30, 40)]
        );

等待所有的诺言得到解决,然后调用finalCall()方法。 要检查是否有效,请从上述代码中删除await,然后在控制台中查看结果。选中Demo,以查看其运行情况。

答案 1 :(得分:0)

我几次遇到这种情况,一种非常简单的方法是在示波器的顶部使用一个计数器。然后在每个回调中,增加计数器,如果计数器等于调用总数,则可以调用该函数。

但是,存在更多迷人的方法,例如异步库,它更好,因为您可以添加更多功能而无需重新评估计数器和更改每个测试。