Angular API&x27;s在使用截取器时调用两次

Angular API&x27;s在使用截取器时调用两次,angular,Angular,我使用两个拦截器拦截每个请求。一个用于添加令牌,另一个用于在API调用无法与后端通信时显示错误 令牌拦截器 @Injectable() export class TokenInterceptor implements HttpInterceptor{ authService?: AuthService; constructor ( private inj: Injector,public errorHandler: ErrorHandler, ) {} intercept(req:

我使用两个拦截器拦截每个请求。一个用于添加令牌,另一个用于在API调用无法与后端通信时显示错误

令牌拦截器

@Injectable()
export class TokenInterceptor implements HttpInterceptor{
  authService?: AuthService;
  constructor ( private inj: Injector,public errorHandler: ErrorHandler, ) {}
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      return this.authService
        .retrieveToken((req.url))
        .mergeMap((token: string) => {
          if (token !== null) {
            const request = req.clone({setHeaders: {Authorization: `Bearer ${ token }`}});
            return next.handle(request);
          }
          return next.handle(req);
        });
}
@Injectable()
export class RequestInterceptor implements HttpInterceptor {

  constructor(
    public errorHandler: ErrorHandler,
  ) {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(request).do((event: HttpEvent<any>) => {
          console.log(request);//It's displaying twice
    }, (err: any) => {
      if (err instanceof HttpErrorResponse) {
        this.errorHandler.handleError(err);
      }
    });
  }
}

当我在ErrorInterceptor中控制台请求时,我无法找出请求调用两次的原因。怎么才能不叫它两次呢

您如何检索令牌?i、 e.“Retrevetoken”是否发出web请求?是的,它正在与Azure对话以获取令牌。但是,即使我删除了令牌拦截器文件,API仍然会在错误中调用两次拦截器,或者您可以共享您的模块文件-您在其中注册拦截器,或者您已经更新了问题
@NgModule({
  imports: [
    HttpClientModule
  ],
  exports: [
    HttpClientModule
  ],
  declarations: [],
  providers: [
    DataService,
    ErrorHandler,
    {
      provide: HTTP_INTERCEPTORS,
      useClass: TokenInterceptor,
      multi: true
    },
    {
      provide: HTTP_INTERCEPTORS,
      useClass: RequestInterceptor,
      multi: true,
    },
    AuthService,
    AdalService,

  ]
})
export class ServicesModule { }