Angular 角度拦截器中错误的完整请求

Angular 角度拦截器中错误的完整请求,angular,rxjs,angular-http-interceptors,Angular,Rxjs,Angular Http Interceptors,问题是,当发生错误时,完整回调无法隐藏加载指示器我不想在每个请求中都使用finalize操作符。它应该在错误拦截器中完成 错误.interceptor.ts return next.handle(req).pipe( timeout(timeOut), catchError((error: HttpEvent<any>) => { if (error instanceof HttpErrorResponse) { if (

问题是,当发生错误时,完整回调无法隐藏加载指示器我不想在每个请求中都使用finalize操作符。它应该在错误拦截器中完成

错误.interceptor.ts

return next.handle(req).pipe(
    timeout(timeOut),
    catchError((error: HttpEvent<any>) => {
        if (error instanceof HttpErrorResponse) {
            if (error.status !== 401) {
                const errorMessage = typeof error.error === 'string' ? error.error : 'Unhandled Error! please try again'
                this.toast.danger('', errorMessage);
            }
            if (error.status === 440) this.userService.logout(true);
        }
            
        return throwError(error);
    })
);
this.proxy.CreateVersion(model).pipe(takeUntil(this.unsubscribe$)).subscribe(
    result => {
        console.log(result)
    },
    console.error,
    () => this.loading.grid = false        // Not Working
)

在你的错误中,你捕捉并释放

catchError(err=>{
/*做点什么*/
回程抛掷器(err);
})
这实际上相当于对错误轻触
。它允许您在发生错误时执行某些操作,而不会更改流的任何内容

但是,如果您希望捕获错误,然后成功地完成流(现在您已经捕获并处理了错误),则通常是这样的

catchError(err=>{
/*做点什么*/
返回({defaultValue});
})
catchError(err=>{
/*做点什么*/
返回空;
})

这两种方法都会将出错的流转化为成功的流,该流将调用
complete
处理程序,而不是最终订阅中的
error
处理程序。

complete
处理程序中有
this.load.grid
。听起来你想把它放到
错误处理程序中。是的,但我想隐藏错误和成功时的加载。我应该把它同时放在错误回调和完全回调中吗?我需要一个更好的方法它应该是这样的。您确定要使用日志执行
complete
方法吗?是的,我确定。只有在请求完成且没有错误时,完整回调才有效。所以我需要隐藏错误加载和完整回调,这看起来不是一个好的做法是的,它很有效