Angular拦截器中使用retrywithdelay操作符时出现意外行为
创始人
2024-10-27 23:01:10
0次

在 Angular 拦截器中使用 retry with delay 操作符时,可能会遇到从服务器返回多个响应的意外情况。这是因为 retry 操作符会重新订阅可观察对象,并向服务器发送新请求。为解决这个问题,我们可以使用 catchError 操作符来捕获错误并手动处理它们。

以下是一个示例 interceptor,使用 retry with delay 和 catchError:

import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { retryWhen, delay, take, mergeMap, catchError } from 'rxjs/operators';

@Injectable()
export class RetryInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest, next: HttpHandler): Observable> {
    return next.handle(request).pipe(
      retryWhen(errors =>
        errors.pipe(
          // 尝试五次,每次间隔 1 秒钟
          delay(1000),
          take(5),
          mergeMap(error => throwError(error))
        )
      ),
      catchError((error: HttpErrorResponse) => {
        if (error.status === 401) {
          // TODO: 处理未授权错误
        }
        return throwError(error);
      })
    );
  }
}

该示例将在发送服务器请求失败 5 次后抛出错误,并使用 catchError 操作符捕获该错误并处理它。如果错误的 HTTP 状态码为 401,则可以在 catchError 中执行自定义未授权错误的处理代码。

相关内容

热门资讯

终于懂了开挂!毛豆互娱ai智能... 终于懂了开挂!毛豆互娱ai智能开挂教程,毛豆互娱有挂么指引(竟然有挂技术)毛豆互娱脚本下载中分为三种...
据悉透视挂!战皇ai智能透视挂... 据悉透视挂!战皇ai智能透视挂方法,战皇真的有挂技法(一直发现有挂)进入游戏-大厅左侧-新手福利-激...
技术分享开挂!赖人娱乐ai智能... 技术分享开挂!赖人娱乐ai智能开挂app,赖人娱乐透视神器手册(一贯有挂技术)1、金币登录送、破产送...
重大发现辅助挂!精卫大厅ai智... 重大发现辅助挂!精卫大厅ai智能辅助挂攻略,精卫大厅怎么开挂大纲(一直有挂解密)1、精卫大厅破解器简...
一分钟揭秘透视!蜜蜂大厅ai智... 一分钟揭秘透视!蜜蜂大厅ai智能透视攻略,蜜蜂大厅开挂技巧妙计(原来有挂技术)1、上手简单,内置详细...
玩家实测透视!新海狮大厅ai智... 玩家实测透视!新海狮大厅ai智能透视教程,新海狮大厅有挂透视吗模板(果然发现有挂)1、每一步都需要思...
必备攻略开挂!欢乐达人葫芦鱼三... 必备攻略开挂!欢乐达人葫芦鱼三骰ai智能开挂插件,欢乐达人葫芦鱼三骰有挂透视吗诀窍(其实有挂解密)1...
重大科普透视!新超凡ai智能透... 重大科普透视!新超凡ai智能透视脚本,新超凡真的有挂机巧(真是有挂技术)1、不需要AI权限,帮助你快...
细节揭秘,德扑之星辅助器购买,... 细节揭秘,德扑之星辅助器购买,aapoker有挂么课程(先前是有透视挂)主打本地运行的 AI 黑科技...
重磅来袭,wpk到底有没有辅助... 重磅来袭,wpk到底有没有辅助挂,wpk开挂破解法子(一贯存在有透视)是一款可以让一直输的玩家,快速...