javascript - 完成后 n 秒重复请求(Angular2 - http.get)

标签 javascript angular rxjs observable reactivex

我玩了一下 angular2,过了一会儿就卡住了。

使用 http.get 可以很好地处理单个请求,但我想每 4 秒轮询一次实时数据,经过一段时间的修补并阅读了很多我最终得到的 reactx 内容:

Observable.timer(0,4000)
  .flatMap(
    () => this._http.get(this._url)
       .share()
       .map(this.extractData)
       .catch(this.handleError)
  )
  .share(); 

http.get-observable 发出请求结果后,是否有一种简单方法来启动(4 秒)间隔? (或者我最终会陷入observable-hell?)

我想要的时间表:

Time(s): 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6
Action:  Request - - Response - - - - - - - - - - - - - - - - - - - -Request-... 
Wait:                | wait for 4 seconds -------------------------> |

最佳答案

更新到 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();

我正在使用 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();

expand 运算符将发出数据并在每次发射时递归地启动一个新的 Observable

关于javascript - 完成后 n 秒重复请求(Angular2 - http.get),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37938735/

相关文章:

javascript - 重用数据流一段时间

angular - WebSocketSubject - 优势?

javascript - 使用从循环数组创建的按钮调用数据

javascript - 按最近的位置过滤 WordPress 帖子

javascript - 动态更改的元素未运行 JQuery 动画

c# - 在单个 ASP.NET Core 3.1 Web API 中管理两个 SPA;一个在根目录中,另一个在 "admin"路由中

angular - BehaviorSubject 订阅者多次获得相同的 next() 元素

javascript - angular2 一旦使用填写搜索表单,如何在刷新页面后获取查询参数?

javascript - 如何在 Angular 6/Ionic 4 中使用 fin-hypergrid 库

Angular Material 2 - 处理多个验证错误消息