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 中执行自定义未授权错误的处理代码。

相关内容

热门资讯

出乎意料的是!wepoker私... 出乎意料的是!wepoker私人定制透视,德普之星辅助软件,果然是有挂(有挂猫腻)1、首先打开德普之...
重磅来袭!wpk德州局透视,s... 重磅来袭!wpk德州局透视,sohoopoker辅助,一直存在有挂(有挂方针)1、不需要AI权限,帮...
值得注意的是!wepoker的... 值得注意的是!wepoker的辅助器,德扑之星透视免费,果然是真的有挂(存在有挂)运德扑之星透视免费...
推荐一款!德州之星扫描器,哈糖... 推荐一款!德州之星扫描器,哈糖大菠萝助手,真是有挂(有挂秘诀)运辅助工具,进入游戏界面。进入辅助器,...
此事迅速冲上热搜!哈糖大菠萝怎... 此事迅速冲上热搜!哈糖大菠萝怎么开挂,德普辅助软件,真是确实有挂(有挂辅助)1、不需要AI权限,帮助...
揭秘真相!wepoker是不是... 揭秘真相!wepoker是不是有人用挂,wepoker挂,本来真的有挂(有挂解惑)透视方法中分为三种...
此事引发网友热议!hhpoke... 此事引发网友热议!hhpoker真的假的,德普之星辅助工具如何打开,原来是有挂(有挂规律)1、德普之...
一分钟了解!wepoker私人... 一分钟了解!wepoker私人局俱乐部,wepoker正确养号方法,确实是有挂(有挂技巧)1、透视辅...
软件辅助挂!约局吧开挂神器是真... 软件辅助挂!约局吧开挂神器是真的吗,智星德州插件,原来存在有挂(发现有挂)该软件可以轻松地帮助玩家将...
2026版软件!wepoker... 2026版软件!wepoker免费脚本咨询,德扑之星辅助工具如何设置,原来确实有挂(详细教程)1、完...