使用RXJS的Angular 5$http轮询

使用RXJS的Angular 5$http轮询,rxjs,angular5,polling,Rxjs,Angular5,Polling,我正在尝试创建一个轮询服务,这就是我所实现的。 目标是在响应包含特定值(例如running:false)时停止轮询 问题是它只会发射一次。 我做错了什么?这是因为concatMap会等待其内部可观察对象完成 在您的_getData中,您返回新的Observable,然后自己调用next,但您从未调用complete,因此Observable保持打开状态。然后concatMap将不再调用其project方法,因为它正在等待前一个可观察对象完成。oops。我完全忘了,真是个傻瓜。谢谢。 // Sam

我正在尝试创建一个轮询服务,这就是我所实现的。 目标是在响应包含特定值(例如running:false)时停止轮询

问题是它只会发射一次。 我做错了什么?

这是因为concatMap会等待其内部可观察对象完成


在您的_getData中,您返回新的Observable,然后自己调用next,但您从未调用complete,因此Observable保持打开状态。然后concatMap将不再调用其project方法,因为它正在等待前一个可观察对象完成。

oops。我完全忘了,真是个傻瓜。谢谢。
// 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))
  }