Javascript rxjs6中的可观察轮询
只是想将我的一些遗留代码迁移到RxJs的更新版本。该代码用于轮询: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似乎是静态的,没有方法链
Observable
.interval(5000)
.startWith(0)
.switchMap(() => this.apiService.getData())
.subscribe(data => /* ... */)
这在RxJs5.2.0
中运行良好
在RxJs6.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()
);