javascript - Angular 2 Http 轮询不传递错误

标签 javascript angular rxjs angular2-http

我正在尝试轮询 REST API 以更新数据表,该数据表使用以下代码可以正常工作:

pollData(url, interval) {
  return Rx.Observable.interval(interval)
    .mergeMap(() => this.http.get(url));
}

// get data
this.dataService.pollData(this.url, this.updateInterval)
            .subscribe(
                data => console.log(data),
                err => console.log(err),
                () => console.log('done'));

问题是 error 和 complete 永远不会被调用。非常感谢任何使它与 onError 和 onCompete 一起工作的建议。谢谢!

最佳答案

关于对观察者的 onComplete 调用,它只会在源可观察对象完成时生效。这意味着当 pollData 返回的 observable 完成时。由于您当前正在轮询而没有退出条件,因此您的可观察对象自然不会完成。

要完成此可观察性,您需要提出退出条件:

  • 超时(例如,轮询 X 秒,然后停止轮询)
  • 投票次数
  • 基于 pollData 的条件(例如,如果在 X 次连续轮询后未检测到任何变化)
  • 外部完成信号
  • 对您的用例有意义的任何其他条件

所有这些条件都可以通过 RxJS 轻松实现,因为它们需要您更新 pollData 函数的代码。

例如对于外部完成信号,你可以这样写:

// defining somewhere the subject for signalling end of polling
stopPollingS = new Rx.Subject();

// somehow pass this subject as a parameter of the polling function
pollData(url, interval, stopPollingS) {
return Rx.Observable
         .interval(interval)
         .mergeMap(() => this.http.get(url))
         .takeUntil(stopPollingS);
}

// somewhere in your code when you want to stop polling
stopPollingS.onNext(true);

关于对观察者的 onError 调用,我不确定我明白发生了什么。您是否尝试过引发错误并检查确实调用了观察者的 onError 处理程序?如果没有错误,很明显 onError 不会被调用。

关于javascript - Angular 2 Http 轮询不传递错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121740/

相关文章:

php - 一个字段,几个按钮

javascript - Javascript 有没有办法选择与多个类名的 bool 表达式匹配的元素?

asp.net - 在现有 ASP.NET 网页上使用 Angular 2 组件

angular - 如何以编程方式激活 kendo ui angular 2 中的选项卡

angular - 在 Angular 2 中订阅 valueChanges 的正确方法

javascript - Jquery 在 ie6 ie7 ie8 中返回 slider 的无效属性值

javascript - React Mapbox GL - 如何使用图层和特征而不是标记在 map 上绘制图像

javascript - NgZone 不再有效

javascript - 引用最新的 rxjs 时出现 rxjs 错误

angular - 没有导出成员 'toPromise' rxjs- 5.5.2