【问题标题】:Angular 2 polling with RxJSAngular 2 使用 RxJS 轮询
【发布时间】:2016-05-02 19:12:16
【问题描述】:

我正在尝试轮询 RESTful 端点以刷新我的实时聊天消息。我知道实时聊天的最佳方法是 Websockets,我只是想了解 RxJS 如何与 Angular 2 配合使用。

我想每秒钟检查一次新消息。我有以下代码:

return Rx.Observable
   .interval(1000)
   .flatMapLatest(() => this.http.get(`${AppSettings.API_ENDPOINT}/messages`))
   .map(response => response.json())
   .map((messages: Object[]) => {
      return messages.map(message => this.parseData(message));
   });

但是我的 Typescript 转译器返回此错误:

“Observable”类型上不存在属性“flatMapLatest”

我正在使用 RxJS 5.0.0-beta.0

如果我使用 merge 而不是 flatMapLatest 它根本不会调用 API。

【问题讨论】:

    标签: angular typescript rxjs5


    【解决方案1】:

    进一步解释@Sasxa 的答案。

    插图中的 SwitchMap。 (来自http://reactivex.io/documentation/operators.html

    【讨论】:

      【解决方案2】:

      你需要使用switchMap(),RxJS 5 中没有flatMapLatest()

      参见Migrating from RxJS 4 to 5...虽然文档对switchMap()...不是很清楚...

      通过将您提供的函数应用于返回 Observable 的源 Observable 发射的每个项目,然后发射这些 Observable 中最近发射的项目,从而返回一个新的 Observable。

      【讨论】:

      • 如何从 switchMap 中获取 JSON?打字稿返回此错误:类型“{}”上不存在属性“json”
      • 尝试将map()移出,并在switchMap()之后进行。我自己没有使用它,文档没有任何帮助(;
      • 如果有人想知道如何从 switchMap 中获取 json,您需要像这样输入:.map((res: Response) => res.json())。确保从 'angular2/http' 导入 Response
      猜你喜欢
      • 2018-02-22
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多