Vin*_*s G 3 rxjs typescript angular
我想在 subscribe 中捕获异常,但结果并不如预期。
this.userService.isUsernameValid (username)
.pipe (
catchError (err =>
{
return throwError (err);
}),
retryWhen (errors =>
errors.pipe (
delay (2500),
take (4),
concatMap (() => throwError ('Network error'))
)
)
)
.subscribe (
data =>
{
//
},
error =>
{
console.log (error)
});
Run Code Online (Sandbox Code Playgroud)
我希望只有在所有尝试都失败时才抛出异常。
上面的代码只发出第一个请求,并且在发生错误时抛出异常(不重做请求)。
如果我删除 concatMap,将进行 4 次尝试,但如果没有成功,我将无法在订阅中捕获错误。
提前致谢。
您可以在特定条件下自己重新抛出错误。例如,concatMap将index参数传递给它的投影函数,您可以使用它来代替take():
throwError("It's broken")
.pipe(
retryWhen(errors => errors.pipe(
concatMap((e, index) => index === 4 ? throwError(e) : of(null)),
)),
)
.subscribe({
next: x => console.log(x),
error: e => console.log('obs', e),
});
Run Code Online (Sandbox Code Playgroud)
现场演示:https : //stackblitz.com/edit/rxjs-kyr8zp
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |