作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在订阅中捕获异常,但结果不符合预期。
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)
});
我希望只有在所有尝试都失败时才抛出异常。
上面的代码只发出第一个请求,如果出错则抛出异常(不重做请求)。
如果我删除 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),
});
关于angular - 用尽 RxJs retryWhen 运算符尝试后如何抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60906771/
我想在订阅中捕获异常,但结果不符合预期。 this.userService.isUsernameValid (username) .pipe ( catchError
我是一名优秀的程序员,十分优秀!