我有一个需要等待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
}
}
getRiskFromServer(quoteReference: string) {
this.riskService.getCustom("Url").subscribe => {
// need to know when the observable has returned the risk
});
}
答案 0 :(得分:3)
我将如何应对这一挑战:
查询后端,当我们得到我们需要的东西时,将其推送到主题
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主题。主题实现Observer和Observable接口,这意味着我们可以使用它们来发出值和注册下标。
主题只不过是传统的事件总线,但更强大,因为它为所有RxJ功能操作员提供了它。但从本质上讲,我们只是使用它来订阅就像一个常规的可观察
或者您可以使用Observable.fromPromise(promise)但如果您不熟悉ng2,这将使事情变得更复杂