当使用零重试时使用rxjs retryWhen时如何引发原始错误

时间:2018-08-18 01:00:38

标签: angular rxjs rxjs6

我正在创建一个Angular Http重试拦截器。当我重试为1时,我的代码如下:

ErrorException (E_NOTICE)
Undefined index: email

这似乎有效。我可以抛出原始错误。

现在,当重试次数为零时,这将不起作用。我认为这是因为我们正在执行take(0)。但是,concat运算符将起作用:

  return next.handle(req).pipe(
    retryWhen((error) => {
      return error.pipe(
        delay(1000),
        take(1),
        concatMap((err) => {
          return _throw({ ...err, message: `Sorry, there was an error (after 1 retry)` });
        })
      );
    })
  );

但是问题是我无法得到原始错误。在零重试方案中,我还可以使用哪些其他运算符来获取/引发原始错误?

1 个答案:

答案 0 :(得分:1)

感谢paulpdaniels的链接。这是对我有用的东西:

    return next.handle(req).pipe(
      retryWhen((error) => {
        return error.pipe(
          concatMap((e, i) => {
            if (i >= retries) {
              return throwError({ ...e, retries });
            }
            return of(e).pipe(tap(() => log.error(e)), delay(retryInterval as number));
          })
        );
      })
    );

我们不再使用take,延迟时间在concatMap之内