gpt4 book ai didi

angular - 用尽 RxJs retryWhen 运算符尝试后如何抛出异常?

转载 作者:行者123 更新时间:2023-12-04 00:20:43 26 4
gpt4 key购买 nike

我想在订阅中捕获异常,但结果不符合预期。

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 次尝试,但如果没有成功,我将无法在订阅中捕获错误。

提前致谢。

最佳答案

您可以在特定条件下自己重新抛出错误。例如 concatMapindex 参数传递给它的投影函数,您可以使用它来代替 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),
});

现场演示:https://stackblitz.com/edit/rxjs-kyr8zp

关于angular - 用尽 RxJs retryWhen 运算符尝试后如何抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60906771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com