我有start()并且只想在getcityinformation()完全完成后继续我的代码。控制台应打印('getcityinformation'=>'done'=>'finished')。如何控制此流?
async start() {
await this.getCityInformation().then(() => console.log('done'));
console.log('finished');
}
async getCityInformation() {
this.apiService.getProductsByCategory(this.city.CategoryID)
.subscribe((data: Product[]) => {
console.log('getCityInformation')
this.products = data;
},
(err) => console.log(err),
() => this.loadActivities()
);
}
最佳答案
您当前的done
、finished
和getCityInformation
顺序是有意义的,因为在asyncgetCityInformation()
中,您实际上会立即返回(例如,对于某些东西,不要返回)。所以这个链条:await
呼叫start()
getCityInformation()
订阅可观测和返回getCityInformation()
现在完成,打印getCityInformation()
start()
打印done
start()
中的回调获取更新并打印finished
要解决这个问题,您需要在getCityInformation()
中等待,直到您准备好观察。例如,当您拥有所需的所有数据时,可以返回一个getCityInformation
。