如何在构造函数中阻止订阅调用直到完成?

时间:2017-02-08 14:10:59

标签: javascript angular rxjs

如何阻止构造函数,等待Http调用返回数据?

constructor() {
  this.initRestData().subscribe();
  // wait for data to be read
  this.nextStep();
}

应用程序中的其他服务/组件需要initRestData()调用检索的数据。我只需要在启动时这样做。如果有更好的方法来处理这个,那么Observable也可以。

1 个答案:

答案 0 :(得分:1)

您可以在subscribedo - 运算符中链接调用:

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
        });
}