以下错误代码: -
400 - 在到达回复single
without delay
次重试
502,503和504使用eight
1000 Sec delay
次重试次数
我的代码如下:
private _getData('loginKey', body, headers) {
return this._http.post('url', body, { headers: headers })
.map((response: Response) => response.json())
.retryWhen(errors => {
return errors
.mergeMap((error) => this.handleError(error))
.delay(2000)
.take(8);
});
}
public handleError(error: Response | any): Observable<any> {
if (error.status === 400) { // retry 1 time and with no delay
return Observable.of(error);
} else { // retry confgured times and configured delay
return Observable.of(error);
}
}
我的问题是如何根据上述错误代码更改delay
和take
值:
如果error.status
400 ,则delay value 0
和take value 1
如果error.status
502,503和504 ,则delay value 2000
和take value 8
答案 0 :(得分:1)
最简单的方法是在服务中定义一个能够返回所需值的函数。
示例:
let errorStatus;
private _getData('loginKey', body, headers) {
return this._http.post('url', body, { headers: headers })
.map((response: Response) => response.json())
.retryWhen(errors => {
return errors
.mergeMap((error) => {
errorStatus = error.status;
this.handleError(error))
})
.delay(ResponseService.getDelay(errorStatus))
.take(ResponseService.getRetries(errorStatus));
});
}
在ResponseService.js中...
function getDelay(status) {
let val = 0;
switch(status) {
case 400:
val = 0;
break;
...
}
return val;
}
function getRetries(status) {
let val = 0;
switch(status) {
case 400:
val = 1;
break;
...
}
return val
}