【发布时间】:2021-01-17 13:56:36
【问题描述】:
我正在使用 Angular,我遇到了异步函数调用的问题。
async ngOnInit() {
this.a = new A();
await this.a.method_A();
this.b = new B(this.a);
this.b.method_B(this.a.data);
}
export class A {
data;
async method_A() {
observable$.subscribe((data) => { this.data = data });
}
}
method_A是一个异步函数,所以必须保证method_A完成后,b必须被实例化,method_B必须被调用。所以,我像上面一样使用了await/async,但我仍然发现实例b是在method_A完成之前创建的。有没有办法让这些步骤按顺序执行?
【问题讨论】:
-
你应该构建你的函数和调用有点不同。你的
method_B调用应该在你的.subscribe块内,因为这意味着:一旦可观察的发射(数据准备好)> 使用该数据调用method_B。现在,如果您的method_A中还有其他未在此处显示的内容,例如,其他一些可观察的(例如http 调用),那么您可能需要查看switchMap, concatMap或类似的运算符。 observables 的全部意义在于在整个流程发生之前对其进行建模,然后在一个地方订阅。这样你就不需要await任何东西。
标签: javascript angular asynchronous async-await