我有start(),并且只希望在getCityInformation()完全完成之后才继续执行我的代码。控制台应打印(“ getCityInformation” =>“完成” =>“完成”)。如何控制此流程?
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()
);
}
答案 0 :(得分:3)
您当前的Array<MerchantList>>
,done
和finished
的顺序很有意义,因为在异步getCityInformation
中,您实际上立即返回了(例如,{{1} } 为了某件事)。连锁店就这样了:
getCityInformation()
呼叫await
start()
订阅一个可观察对象并返回getCityInformation()
现在已完成,getCityInformation()
打印getCityInformation()
start()
打印done
start()
中的回调获取更新并输出finished
要解决此问题,您需要在getCityInformation()
中等待,直到您准备好观察到的东西为止。例如,您可以返回getCityInformation
,当您拥有所需的所有数据时就可以满足。
答案 1 :(得分:1)
您需要返回promise等待结果
getCityInformation
功能
async start() {
await this.getCityInformation().then(() => console.log('done'));
console.log('finished');
}
async getCityInformation() {
return new Promise((resolve, reject) => {
this.apiService.getProductsByCategory(this.city.CategoryID)
.subscribe((data: Product[]) => {
console.log('getCityInformation')
this.products = data;
resolve(data)
},
(err) => reject(err) ,
() => this.loadActivities()
);
})
}