angular2可观察区间 - 处理无序响应

时间:2016-12-21 08:32:33

标签: angular timer angular2-observables

我有一个场景,我需要重复调​​用一个服务方法(它会调用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();
                     }
                   });
                 });

1 个答案:

答案 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错误),但这会给你一个想法。