如何阻止构造函数,等待Http调用返回数据?
constructor() {
this.initRestData().subscribe();
// wait for data to be read
this.nextStep();
}
应用程序中的其他服务/组件需要initRestData()调用检索的数据。我只需要在启动时这样做。如果有更好的方法来处理这个,那么Observable也可以。
答案 0 :(得分:1)
您可以在subscribe
或do
- 运算符中链接调用:
constructor() {
this.initRestData()
.do(receivedData => this.nextStep(receivedData)})
.subscribe();
}
对于其他服务依赖this.nextStep()
的情况,您也应该将其实现为流:
private initialData$ = new BehaviorSubject<any>(null);
constructor() {
this.initRestData()
.do(data => this.initialData$.next(data))
.switchMap(() => this.nextStep())
.subscribe();
}
nextStep(): Observable<any> {
return this.initialData$
.filter(data => data != null)
.take(1)
.map(data => {
// do the logic of "nextStep"
// and return the result
});
}