我的Angular应用程序中有一个http拦截器:
@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
constructor(private messageService: MessageService) {}
intercept( req: HttpRequest<any>, next: HttpHandler ): Observable<HttpEvent<any>> {
return next
.handle( req ).pipe(
tap(event => {
if (event instanceof HttpResponse) {
Logger.log('Successful HTTP request in interceptor');
}
}, (error: any) => {
const notFoundError = ErrorCodes.getErrorDescription(error.status);
if (notFoundError) {
this.messageService.show(errorMessage);
} else {
return Observable.throw( error );
}
}
));
}
}
当存在notFoundError时,我的应用程序正确显示了我想要的消息,但似乎错误传播回服务中的错误处理程序,我得到了一个 &#34;错误错误:未捕获(承诺):HttpErrorResponse&#34;在控制台中。有没有办法阻止拦截器中的错误?
我的意思是我会在这里处理常见错误,只会将其他错误传播回服务。
答案 0 :(得分:0)
您是否尝试从Observable返回空?
if (notFoundError) {
return Observable.empty();
} else {
return Observable.throw( error );
}
答案 1 :(得分:0)
我正在使用rxjs 6:
import {EMPTY} from 'rxjs';
//in your try/catch, interceptor, if statement, etc.
return EMPTY;
摘自文档:
创建一个不向观察者发射任何项目的Observable, 立即发出完整的通知。
答案 2 :(得分:-1)
试试这个:
intercept (request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
catchError((error: HttpErrorResponse) => {
if (error.status === 401) {
alert('Please log in.')
return throwError(null)
}
return throwError(error)
})
)
}