我有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();
答案 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)
我几次遇到这种情况,一种非常简单的方法是在示波器的顶部使用一个计数器。然后在每个回调中,增加计数器,如果计数器等于调用总数,则可以调用该函数。
但是,存在更多迷人的方法,例如异步库,它更好,因为您可以添加更多功能而无需重新评估计数器和更改每个测试。