等待观察完成

7 typescript rxjs5 angular2-observables angular

我有一个方法需要等待一个observable完成.我知道observable非常适合随着时间的推移返回单个数据,但是我需要知道这个observable何时完全返回它的所有数据,所以我可以在它返回的对象上运行验证代码.

getCustom方法订阅了提供的url上的可观察运行,然后返回observable.

我不太确定这是否是解决这种情况的最佳方式,所以如果有人能给我任何建议或方向来处理这个问题,我将不胜感激.

  private validateQuoteRetrievalAnswers(reference: string) {

         // Get the risk from the server
        this.riskManager.getRiskFromServer(reference);

        if (this.riskManager.risk) {
            // Validate risk that was returned
        }
    }
Run Code Online (Sandbox Code Playgroud)
getRiskFromServer(quoteReference: string) {

    this.riskService.getCustom("Url").subscribe => {
        // need to know when the observable has returned the risk
    });

}
Run Code Online (Sandbox Code Playgroud)

Vik*_*ode 8

我将如何应对这一挑战:

查询您的后端,当我们得到我们需要的内容时,将其推送到主题

riskSubject = new Subject<Risk>();

getRiskFromServer(quoteReference: string) {
  this.riskService.getCustom("Url")
  .subscribe( 
    data => { this.riskSubject.next(data); },
    error => { console.log(error) }
 });
}
Run Code Online (Sandbox Code Playgroud)

然后订阅主题并等待直到获得所需内容并开始验证

private validateQuoteRetrievalAnswers(reference: string) {

         // Get the risk from the server
        this.riskManager.getRiskFromServer(reference);
        // subscribe to subject
        this.riskManager.riskSubject.subscribe(
         data => {
           //do your validation
        })
}
Run Code Online (Sandbox Code Playgroud)

可观察数据服务的核心是 RxJs 主题。主题实现了 Observer 和 Observable 接口,这意味着我们可以使用它们来发出值和注册下标。

该主题只不过是一个传统的事件总线,但功能更强大,因为它为所有 RxJ 功能运算符提供了它。但本质上,我们只是用它来订阅,就像常规的 observable 一样

来源:Angular-university.io

或者你可以使用 Observable.fromPromise(promise) 但是如果你是 ng2 的新手,这会让事情变得更复杂一些