rxJS observable 在 Angular 2 中每次满足条件时重复调用

Dav*_*vid 5 observable rxjs angular

我基本上想实现一个可观察的池消费者。

\n\n

因此,服务会发出 http 调用来检索多个结果,然后组件会逐一使用这些结果。\n当服务检测到结果用完时,它将再次调用服务器以获取多个结果。新的结果。

\n\n

我开始尝试每次进行单个 http 调用并订阅和取消订阅,但它看起来相当混乱和令人困惑。

\n\n

我想要这样的东西:

\n\n
this.http\n  .post(API, postData)\n  .map((response: Response) => response.json())\n  .subscribe(data => this.saveData(data))\n  .repeat(when_certain_condition)\n
Run Code Online (Sandbox Code Playgroud)\n\n

有什么办法可以实现这一点吗?我读到了有关重复的内容,但似乎您需要提供要重复的值,因此 \xc2\xb4t 似乎不是可行的方法。

\n\n

有什么想法吗?\n谢谢

\n

Max*_*Max 3

我遇到了同样的情况,我用以下方法解决了。

this.http
  .post(API, postData)
  .map((response: Response) => response.json())
  .delay(2000)
  .flatMap(data => {
    this.saveData(data);
    if (when_certain_condition) {
      return Observable.throw('retry');
    } else {
      return Observable.of(data);
    }
  }).retry().subscribe();
Run Code Online (Sandbox Code Playgroud)

解释:

  1. 您需要使用 aflatMap()将 Observable 发出的项目转换为 Observables
  2. 您需要使用Observable.throw()强制错误,这样retry()就会调用
  3. 我使用了 a delay(2000),这样我会等待 2 秒,然后重试另一个呼叫