Angular中如何仅针对特定状态码重试HTTP请求?
解决RxJS retry操作符的错误过滤问题
你可以通过retry配置项中的filter函数来实现错误过滤,只对符合特定条件的错误执行重试逻辑。
filter函数接收错误对象作为参数,返回布尔值:
- 返回
true时,触发重试 - 返回
false时,跳过重试,直接将错误传递到后续的catchError
修改后的代码示例如下:
return next.handle(copiedRequest).pipe( retry({ count: 5, delay: 1000, // 定义重试的过滤条件 filter: (error: HttpErrorResponse) => { // 示例:仅对服务器无响应(status 0)或5xx服务器错误重试 return error.status === 0 || (error.status >= 500 && error.status < 600); } }), catchError((error: HttpErrorResponse) => { if (error.status === 0) { // 处理服务器无响应的逻辑 } return throwError(() => error); }) );
这样配置后,像400(请求参数错误)、401(未授权)这类客户端错误会直接进入catchError,不会触发重试,避免无意义的请求重复发送。
内容的提问来源于stack exchange,提问作者Eduard Keilholz
相关产品推荐
相关产品推荐

