我有此服务,最初返回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);
答案 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);