我有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()
        );
}

最佳答案

您当前的donefinishedgetCityInformation顺序是有意义的,因为在asyncgetCityInformation()中,您实际上会立即返回(例如,对于某些东西,不要返回)。所以这个链条:
await呼叫start()
getCityInformation()订阅可观测和返回
getCityInformation()现在完成,打印getCityInformation()
start()打印done
start()中的回调获取更新并打印finished
要解决这个问题,您需要在getCityInformation()中等待,直到您准备好观察。例如,当您拥有所需的所有数据时,可以返回一个getCityInformation

10-06 04:01