gpt4 book ai didi

angular - 使用 rxjs retryWhen 零重试时如何抛出原始错误

转载 作者:行者123 更新时间:2023-12-04 13:21:33 28 4
gpt4 key购买 nike

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

  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)` });
})
);
})
);

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

现在,当重试次数为零时,这不起作用。我认为那是因为我们正在执行 take(0)。但是, concat 运算符将起作用:
  return next.handle(req).pipe(
retryWhen((error) => {
return error.pipe(
delay(1000),
take(0),
concat(_throw({ message: `Sorry, there was an error (after 0 retries)` }))
);
})
);

但问题是我无法得到原始错误。我可以在零重试场景中使用哪些其他运算符来获取/抛出原始错误?

最佳答案

感谢 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 内

关于angular - 使用 rxjs retryWhen 零重试时如何抛出原始错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904407/

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