jua*_*rio 2 http rxjs typescript angular
我在 Angular 服务中有一个查询,有时我收到一个空数组,我想在这种情况下强制再次执行查询
let request = this.http.post(this.searchlUrl, payload).pipe(
retryWhen(errors => errors.pipe(delay(1000), take(2), concat(throwError("Error Data")))),
map( res => {
// If receive res['hotels'] == [] I want to force error
return res;
})
).subscribe(res => {
// Do Something when everything is ok
}, err => {
// Do Something on error
});
});
Run Code Online (Sandbox Code Playgroud)
如果出现错误,我正在使用 retryWhen 发出新请求(我等待 1 秒)。我的方法是在接收空时强制错误,以便激活 RetryWhen 但我不知道该怎么做,也不知道在接收空时强制重新协商的最佳做法是什么。
主要问题是操作符的顺序。retryWhen仅对error通知做出反应,因此您需要在之前抛出错误retryWhen:
this.http.post(this.searchlUrl, payload).pipe(
map(response => {
if (something) {
throw new Error(); // Will be caught by `map` and reemitted as an error notification.
}
return response;
}),
retryWhen(errors => errors.pipe(take(2), delay(1000))),
).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
现场演示:https : //stackblitz.com/edit/rxjs-cmh1wd
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |