我可以在Rxjs Retry上更改查询参数值吗?

时间:2018-06-27 10:42:24

标签: angular rxjs rxjs5

我有此服务,最初返回null(初始化后台作业)[ this.q = true]。但是稍后,如果我将其更改为[ this.q = false],并且如果作业成功,它将返回值。

因此,首先我需要呼叫[ this.q = true]并重试[ this.q = false]。 但是下面的代码不起作用。它总是使https://api.example.com?q=true

return this.http.get('https://api.example.com?q=' + this.q)
  .map((res: any) => {    
    if (res === null) {          
      throw new Error("not enough tiles !");
    }                
    return res;
  }).catch((e) => {    
    this.q = false;
    return error;
  })
  .retryWhen(e => e.delay(2000))
  .retry(3);

1 个答案:

答案 0 :(得分:2)

Retry重新订阅了源Observable,因此,如果要更改get上的retry请求的参数,则应计算参数值部分您的来源可观察到。例如

return Observable.of('https://api.example.com?q=')
  .concatMap((baseUrl) => this.http.get(baseUrl + this.q))
  .map((res: any) => {    
    if (res === null) {          
      throw new Error("not enough tiles !");
    }                
    return res;
  }).catch((e) => {    
    this.q = false;
    return error;
  })
  .retryWhen(e => e.delay(2000))
  .retry(3);