正如我从角拦截器文档中了解到,next.handle()在完成HTTP请求后执行任务,所以我尝试使用没有next.handle()的拦截方法在执行HTTP请求之前运行代码
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (!this.connectivityService.networkStatus.connected) {
return throwError({message: 'error returned from interceptor'});
}
}
有没有可能在没有next.handle()的情况下使用角度拦截器?
发布于 2022-07-11 09:04:36
从你的评论中得到澄清的问题的解决办法如下:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (!this.connectivityService.networkStatus.connected) {
return throwError({message: 'error returned from interceptor'});
}
next.handle();
}
您可以在所有非错误场景中调用next.handle()
,这样如果没有错误,http请求就会继续,但是会被错误条件打断。
您的拦截器是管道的一部分,它是由多个步骤组成的链,您可以使用next.handle()
将进程转移到下一个步骤。这意味着您可以将需要在HTTP请求之前发生的代码放在next.handle()
之前,也可以将代码放在需要在管道完成后发生的next.handle()
之后。如果不调用next.handle
,管道就会中断,不会发生。您将返回一个可观察到的throwError
,以便这是管道的结束。在非错误场景中,它看起来有点像这样:
A {
B {
C {
http happens
}
}
}
在错误场景中是这样的:
A {
B {
returns error value
}
}
如果B
是您的拦截器,以及A
和C
管道的其他部分。
https://stackoverflow.com/questions/72941682
复制