我对 retryWhen 有疑问。
我正在做一个条形码扫描应用程序,要求是当状态代码为500时,我们将重试请求,如果为400,则将该条形码推送到数组中(列出错误400的条形码)。
我需要按照上面的要求运行 .retryWhen
并使用状态代码。
我的代码现在是这样的,但它总是在出现错误时重试并跳过 .subcribe
,我需要处理错误 400,我只需要在状态代码为 500 时重试,使用 400然后将该条形码插入数组中。
let modelItem = {
...
};
this._pickAppSv.updateTicketStatus(modelItem, !endWave)
.retryWhen((obs) => { // Retry when error status is 500, 10 times
return obs
.mergeMap(error => (error.status === 500) ? Observable.throw(error) : Observable.of(error))
.take(9);
})
.subscribe(
(resp: any) => {
...
},
(err) => {
if (err.message === 'Bad Request') { // error 400
this.errorList.push(modelItem);
}
}
);
我查了很多资料,但似乎没有解决办法。非常感谢您的帮助。
最佳答案
Shashank的回答是正确的。但由于某种原因,我的 rxjs 版本无法与 .pipe
一起使用,所以我对其进行了一些更改。谢谢沙尚克。
this._pickAppSv.updateTicketStatus(modelItem, !endWave)
.retryWhen((obs) => { // Retry when error status is 500, 10 times
return obs
.mergeMap((error) => {
if (error.status === 500) {
return Observable.of(error)
.delay(500)
}
if (error.status === 400) {
this.errorList.push(modelItem);
throw({error: error.message});
}
return Observable.throw({error: 'Error:' + error});
})
.take(9);
})
.subscribe({
//do something
});
关于javascript - Angular retryWhen 与条件状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367339/