Javascript rxjs6中的可观察轮询

Javascript rxjs6中的可观察轮询,javascript,angular,rxjs,Javascript,Angular,Rxjs,只是想将我的一些遗留代码迁移到RxJs的更新版本。该代码用于轮询: Observable .interval(5000) .startWith(0) .switchMap(() => this.apiService.getData()) .subscribe(data => /* ... */) 这在RxJs5.2.0中运行良好 在RxJs6.0.0中,由于多种原因,这不起作用(observeable唯一的方法是create,interval似乎是静态的,没有方法链

只是想将我的一些遗留代码迁移到RxJs的更新版本。该代码用于轮询:

Observable
  .interval(5000)
  .startWith(0)
  .switchMap(() => this.apiService.getData())
  .subscribe(data => /* ... */)
这在RxJs
5.2.0
中运行良好

在RxJs
6.0.0
中,由于多种原因,这不起作用(
observeable
唯一的方法是
create
interval
似乎是静态的,没有方法链接,…)

如何在最新的RxJs中做到这一点?

我没有运行它:

interval(5000).pipe(
    switchMap(() => this.apiService.getData())
).subscribe(data => /* ... */)
Interval
现在是一个返回可观察值的函数,转换链接在
管道
函数中。

我没有运行它:

interval(5000).pipe(
    switchMap(() => this.apiService.getData())
).subscribe(data => /* ... */)
Interval
现在是一个返回可观察值的函数,转换链接在
管道
函数中。

参考反应式编程。使用interval实际上并不实用。因为如果您没有从间隔值中的
this.apiService.getData()
获得响应,那么间隔将发出另一个值,并执行一个新请求

您需要做的是使用一个发出单个值的计时器,使用开关映射执行您的请求,并在成功后重复轮询。此外,如果要在出错后重试,可以在重复之前使用重试

这是C#中使用Rx.Net()的实现:

有关反应式编程的更多增强功能,请参见。

参考资料。使用interval实际上并不实用。因为如果您没有从间隔值中的
this.apiService.getData()
获得响应,那么间隔将发出另一个值,并执行一个新请求

您需要做的是使用一个发出单个值的计时器,使用开关映射执行您的请求,并在成功后重复轮询。此外,如果要在出错后重试,可以在重复之前使用重试

这是C#中使用Rx.Net()的实现:

可以在中找到进一步的增强功能

timer(5000).pipe(
    switchMap(tick => this.apiService.getData()),
    retry(3), // retry 3 times before bubbling an error
    repeat()
);