小编Pau*_* GR的帖子

Angular 2 Http RetryWhen

我正在尝试retryWhen在HTTP调用中使用.

尝试使用时,它完美地工作:

return this.http.get(`${environment.apiUrl}/track/${this.user.instance._id}/${this.currentPlayer.playlist.id}/next?s=${this.playerCounter}`, options)
      .timeout(500, new TimeoutError(`Timeout trying to get next track. [instanceId=${this.user.instance._id}]`))
      .retryWhen(attempts => {
        return Observable.range(1, 3).zip(attempts, i => i).flatMap(i => 3 === i ? Observable.throw(attempts) : Observable.timer(i * 1000));
      })
Run Code Online (Sandbox Code Playgroud)

如果出现超时错误,最多会尝试3次.

但是,总是有一个buuut,我想让它更抽象地用于各种用例,为此,我必须检查错误的类型.

只会重试TechnicalErros.

所以我尝试了这个没有成功.

.retryWhen(attempts => {
    return attempts.flatMap(error => {
      if(error instanceof TechnicalError) {
        return Observable.range(1, 3).zip(attempts, i => i).flatMap(i => 3 === i ? Observable.throw(attempts) : Observable.timer(i * 1000));
      } else {
        Observable.throw(error);
      }
    });
  })
Run Code Online (Sandbox Code Playgroud)

它首先尝试停止,不执行Observable.timer(),也不执行Observable.throw().

我几乎可以肯定问题是关于第一个 …

observable rxjs angular-http rxjs5 angular

4
推荐指数
1
解决办法
5039
查看次数

标签 统计

angular ×1

angular-http ×1

observable ×1

rxjs ×1

rxjs5 ×1