首页 > 解决方案 > 如何防止错误处理程序在 Observable 流上多次触发?

问题描述

我有一个处理 http 请求的 http 服务。它有一个处理程序,通过在屏幕上弹出一个模式来处理错误。

我还有一个拦截器,可以捕获插入授权令牌的请求,以备不时之需。令牌来自请求另一个服务。

问题是,如果需要授权请求但它失败了,即使第二个请求从未发送,模态错误也会显示两次。

如果认为我处理 Observable 流的方式有问题。有人可以帮忙吗?

/// http service
  request(url, body, headers) {
    return this.httpClient.post(url, body, headers).pipe(
      catchError(() => this.handleError())
    );
  }

  handleError() {
    this.showModal();
    return throwError('Theres been an error.');
  }
/// interceptor
  intercept(request, next) {
    const authorization = request.headers.get('Authorization');
    if (authorization) {
      return this.httpService.request(url, body, headers).pipe(
        exhaustMap(token => {
          const newRequest = request.clone({
            headers: request.headers.set(
              'Authorization',
              token
            )
          });
          return next.handle(newRequest);
        })
      );
    }
    return next.handle(request);
  }

标签: javascriptionic-frameworkrxjs

解决方案


您是否尝试过console.log解决您遇到的错误。您可能会遇到两个不同的错误。

您是否也确定这部分代码:

const newRequest = request.clone({
  headers: request.headers.set(
    'Authorization',
    token
  )
});

在某些库中,不允许在发送请求后设置标头。


推荐阅读