Angular 角度拦截器中错误的完整请求
问题是,当发生错误时,完整回调无法隐藏加载指示器我不想在每个请求中都使用finalize操作符。它应该在错误拦截器中完成 错误.interceptor.tsAngular 角度拦截器中错误的完整请求,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 (
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
方法吗?是的,我确定。只有在请求完成且没有错误时,完整回调才有效。所以我需要隐藏错误加载和完整回调,这看起来不是一个好的做法是的,它很有效