【问题标题】:Waiting for an observable to finish等待一个可观察的完成
【发布时间】:2017-09-08 01:35:47
【问题描述】:

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

getCustom 方法订阅了在提供的 url 上运行的 observable,然后返回 observable。

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

  private validateQuoteRetrievalAnswers(reference: string) {

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

        if (this.riskManager.risk) {
            // Validate risk that was returned
        }
    }
getRiskFromServer(quoteReference: string) {

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

}

【问题讨论】:

  • 你不能等待 observable 完成。您只能订阅并将回调传递给subscribe(...),当数据到达时调用该回调。
  • 这两种方法都在不同的服务中,你能举例说明你的意思吗?
  • 那么不要在服务中调用subscribe()(只需返回可观察到的return this.riskService.getCustom("Url");,在需要数据的服务中使用getRiskFromServer(...).subscribe(...)另见stackoverflow.com/questions/36271899/…

标签: angular typescript rxjs5 angular2-observables


【解决方案1】:

我将如何应对这一挑战:

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

riskSubject = new Subject<Risk>();

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

然后订阅主题并等到你得到你需要的东西并开始验证

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

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

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

来源:angular-university.io

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

【讨论】:

  • 这正是我最终要做的,我的问题是我试图在成功处理程序关闭 riskSubject,subscribe() 之后执行特定逻辑。相反,我只是在 data = { } 代码块内执行了我的操作。不了解使用可观察对象的可用性的最佳方法是我的错误
猜你喜欢
  • 2018-01-03
  • 2019-03-25
  • 2019-08-20
  • 2012-05-04
  • 2012-07-27
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多