Spa*_*cus 12 javascript observable rxjs reactivex angular
我玩了angular2并且在一段时间后卡住了.
使用http.get对于单个请求工作正常,但我想每4秒轮询一次实时数据,经过一段时间的修补并阅读了很多反应性的东西后我最终得到:
Observable.timer(0,4000)
.flatMap(
() => this._http.get(this._url)
.share()
.map(this.extractData)
.catch(this.handleError)
)
.share();
Run Code Online (Sandbox Code Playgroud)
在-observable发出请求结果后,是否有一种简单的方法可以启动(4秒)间隔http.get?(或者我最终会在可观察到的地狱?)
我想要的时间表:
Time(s): 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6
Action: Request - - Response - - - - - - - - - - - - - - - - - - - -Request-...
Wait: | wait for 4 seconds -------------------------> |
Run Code Online (Sandbox Code Playgroud)
Can*_*yen 10
更新到RxJS 6
import { timer } from 'rxjs';
import { concatMap, map, expand, catchError } from 'rxjs/operators';
pollData$ = this._http.get(this._url)
.pipe(
map(this.extractData),
catchError(this.handleError)
);
pollData$.pipe(
expand(_ => timer(4000).pipe(concatMap(_ => pollData$)))
).subscribe();
Run Code Online (Sandbox Code Playgroud)
我正在使用RxJS 5,我不确定RxJS 4等效运算符是什么.无论如何这里是我的RxJS 5解决方案,希望它有所帮助:
var pollData = this._http.get(this._url)
.map(this.extractData)
.catch(this.handleError);
pollData.expand(
() => Observable.timer(4000).concatMap(() => pollData)
).subscribe();
Run Code Online (Sandbox Code Playgroud)
expand运算符将发出数据并以每次发射递归地启动一个新的Observable
| 归档时间: |
|
| 查看次数: |
6904 次 |
| 最近记录: |