已弃用的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
相关产品推荐
相关产品推荐

