Могу ли я изменить значение параметров запроса в Rxjs Retry? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть этот сервис с возвратом 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 голосов
/ 28 июня 2018

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);
...