我有一个场景,我需要重复调用一个服务方法(它会调用HTTP post方法),直到我得到结果为止,我使用的是间隔。
在下面的代码中,将以100 ms的间隔调用getReportResultsList(id)
方法。
问题是,服务器可能需要300毫秒的时间来处理第一个请求并返回结果。但同时由于间隔(100),还有2个请求进入服务器以获得结果。因此,在收到第一个请求的结果后,我不想处理意外的第二和第三个请求响应结果。
所以我不想处理第二和第三个回复。任何人都可以知道如何处理这些无序响应吗?
感谢。
let subscriber = Observable.interval(100).subscribe(() => {
this.reportService.getReportResultList(id)
.subscribe(result => {
this.reportResults = result;
if (this.reportResults) {
this.prepareViewData(result);
subscriber.unsubscribe();
}
});
});
答案 0 :(得分:0)
作为上述评论者,您不需要为您的用例每秒拨打服务器10次。您只需要在实际获得结果之前调用服务器。
更适合使用Observables的retryWhen
语义。
这些方面的东西:
this.reportService.getReportResultList(id)
.subscribe(result => {
this.reportResults = result;
if (!this.reportResults) {
throw 'empty';
}
this.prepareViewData(result);
})
.retryWhen((errors) => return errors.delay(10));
你需要在retryWhen处理程序中更加彻底,因为可能会引发其他错误(例如:HTTP 50x错误),但这会给你一个想法。