拦截器中的catchError消除了取消请求的能力

时间:2019-01-30 14:56:12

标签: angular

我在某些可以触发的组件中具有请求,例如通过单击:

performRequest() {
    const request = this.http
      .get('https://randomfox.ca/floof/')
      .subscribe();

      request.unsubscribe();
}

我有http拦截器:

@Injectable()
export class MyInterceptor implements HttpInterceptor {
    public intercept(req: HttpRequest<any>, next: HttpHandler) {
        return next.handle(req); // all is ok
        return next.handle(req).pipe(catchError(e => throwError(e))); // request can't be cancelled now
    }
}

如果第一个return工作正常-请求被unsubscribe()取消,但是第二个却没有取消(我说的是在请求级别取消,就像请求没有待处理而是被取消一样)。

为什么会这样?如何处理拦截器中的错误并能够取消请求?

1 个答案:

答案 0 :(得分:0)

我找到了一些解决方法,因此可能会有所帮助- return next.handle(req).pipe(tap(noop, (err: any) => /* handle somehow*/));

还要说,我已经在单独的(和+-干净的)有角项目中进行了尝试,并且未重现问题