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

已弃用的retryWhen替代方案咨询及HTTP重试代码改造需求

替代弃用retryWhen的HTTP重试方案

RxJS 7+ 中retryWhen已被标记为弃用,推荐使用带配置参数的retry操作符实现相同的重试逻辑,以下是改写后的代码:

private retryRequest(request: HttpRequest<any>, next: HttpHandler) {
    let ok: string;
    const started = Date.now(); 
   
    return next.handle(request).pipe(
      tap(event => ok = event instanceof HttpResponse ? 'succeeded' : 'failed'),
      retry({
        count: this.retryCount,
        delay: (error, retryCount) => {
          ok = 'failed';
          // 校验是否符合重试条件
          if (this.isRetry(error)) {
            console.log("Retrying...", error);
            // 返回延迟Observable触发重试
            return timer(this.retryWaitMilliSeconds);
          }
          // 不符合重试条件时,执行错误处理逻辑并终止流
          return this.handleResponseError(error, request, next);
        }
      }),
      finalize(() => {
        this.consoleLogRequestTime(started, ok, request);
      })
    );
  }

核心改动说明

  • 替换retryWhen为retry({ count, delay }):count指定最大重试次数,delay函数负责重试判断、延迟触发及错误分支处理
  • delay函数参数:接收当前错误对象error和已重试次数retryCount(从1开始计数,与原代码逻辑对齐)
  • 重试触发:符合条件时返回timer(this.retryWaitMilliSeconds)实现延迟重试,同时保留原有的重试日志输出
  • 错误终止:不符合重试条件时,直接返回handleResponseError的结果终止流,与原代码逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:35:32