You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTTP 400错误时取消重试仅打印错误日志?

修改Angular RetryInterceptor实现HTTP 400错误不重试并输出日志

要实现遇到HTTP 400错误时不重试、仅输出错误信息到控制台,需要在重试逻辑中排除400状态码,并在错误捕获分支中添加日志输出,具体修改如下:

修改后的完整代码

@Injectable()
export class RetryInterceptor implements HttpInterceptor {
  private keycloakService = inject(KeycloakService);

  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
    return next.handle(request).pipe(
      retry({
        count: 3,
        delay: (error, retryCount) => {
          // 遇到400错误直接抛出,终止重试流程
          if (error.status === 400) {
            throw error;
          }
          if (error.status === 503 || error.status === 504) {
            return timer(1000); // 503/504错误固定1秒后重试
          }
          return timer(retryCount * 1000); // 其他可重试错误使用递增延迟
        }
      }),
      catchError((error) => {
        if (error.status === 401) {
          return this.handleUnauthorized(request, next);
        }
        if (error.status === 503 || error.status === 504) {
          // 这里可以添加503/504错误的跳转逻辑
        }
        // 400错误输出控制台日志
        if (error.status === 400) {
          console.error('HTTP 400错误:', error.message, error);
        }
        
        // 原代码中noDisplayError变量未定义,需根据实际业务补充定义或逻辑
        // if (!noDisplayError) {
        // }
        throw error;
      })
    );
  }

  // 需确保handleUnauthorized方法已实现
  private handleUnauthorized(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
    // 此处补充401错误的处理逻辑,比如刷新token后重试请求
    throw new Error('handleUnauthorized method not implemented');
  }
}

关键修改说明

  1. 终止400错误的重试流程:在retry的delay回调中,一旦检测到错误状态码为400,直接抛出错误。RxJS的retry操作符会在delay回调抛出错误时停止重试,直接进入catchError分支。
  2. 输出400错误日志:在catchError中新增400错误的判断分支,使用console.error输出详细错误信息,之后抛出错误让上层处理(或根据业务需求调整是否抛出)。

注意:原代码中noDisplayError变量未定义,需根据实际业务场景补充该变量的定义或对应的错误显示逻辑。

内容的提问来源于stack exchange,提问作者Christos Segkani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:56:13