我正在跟踪this article,了解如何通过自定义HttpInterceptor
类在Angular应用程序中实现全局错误处理。
重要的部分是intercept()
的这种实现:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => {}, (err: any) => {
if (err instanceof HttpErrorResponse) {
// do error handling here
}
});
}
我不知道怎么办,如果我在这里遇到错误,如何让intercept()
函数返回一个永远无法解析的Observable?
我尝试将next.handle.do()
更改为next.handle.catch()
,这让我返回了一个Observable,但是我想使用Observable.never
返回一个将永远无法解析的Observable,但是它希望我返回一种Observable<HttpEvent<any>>
,它不会让我将NeverObservable
转换为该类型。
有没有办法获得我想要的功能?
答案 0 :(得分:1)
不要返回永不。返回一个空的。它们会自动完成您想要的操作,因为在页面ondestory事件之前,它们永远不会在内存中徘徊。循环中返回500/503的所有内容都会堆积起来。
if (err instanceof HttpErrorResponse) {
if (err.status === 503 || err.status ===500) {
// do handling. message or whatever
return Observable.empty();
}
}
答案 1 :(得分:0)
如果我对您的理解正确,那么您会受到intercept
的返回类型的限制,无法更改?如果可以更改,只需进行以下操作:
intercept(...): Observable<HttpEvent<any>> | Observable<never>
如果您无法执行此操作,那么我catchError()
仅返回一个永远不会完成的Observable:
catchError(() => new Observable())
请注意,您可能正在创建内存泄漏。