我正在创建一个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)` });
})
);
})
);
但是问题是我无法得到原始错误。在零重试方案中,我还可以使用哪些其他运算符来获取/引发原始错误?
答案 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之内