Angular 5 $http 使用 RXJS 进行轮询

Angular 5 $http polling with RXJS

我正在尝试创建一个轮询服务,这就是我所取得的成就。 目标是进行轮询,当响应包含特定值时可以停止轮询(例如 running: false

// Sample call
  _getData(): Observable<any> {
    return new Observable((observer) => {
      setTimeout(() => {
        observer.next({ data: "bar", running: true });
      }, 2000)
    })
  }

  start() {
    timer(0, 5000)
      .pipe(
        concatMap(() => from(this._getData())
        .pipe(map(response => response))
        )
      )
     // .pipe(filter(backendData => backendData.running === true))
      .subscribe(() => console.info("CIAO" + ++calls))
  }

问题是这会触发一次。 我做错了什么?

这是因为 concatMap 等待其内部 Observable 完成。

在你的 _getData 中你 return new Observable 然后你自己调用 next() 但你永远不会调用 complete() 所以 Observable 保持打开状态。然后concatMap 将永远不会再调用它的项目方法,因为它正在等待之前的 Observable 完成。