要解决Angular拦截器返回不发出值的observable的问题,可以通过使用tap
操作符来修改Observable并确保它发出值。
以下是一个示例代码:
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
export class CustomInterceptor implements HttpInterceptor {
intercept(request: HttpRequest, next: HttpHandler): Observable> {
return next.handle(request).pipe(
tap(response => {
// 在这里可以对返回的响应进行操作
console.log('拦截器收到响应:', response);
})
);
}
}
在上面的代码中,我们使用tap
操作符来访问拦截器返回的Observable并对其进行操作。您可以在tap
操作符的回调函数中添加适当的逻辑来处理拦截器的结果。
然后,将此拦截器添加到您的Angular模块的提供商列表中,以便它能够拦截HTTP请求。
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { CustomInterceptor } from './custom.interceptor';
@NgModule({
imports: [HttpClientModule],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: CustomInterceptor,
multi: true,
},
],
})
export class AppModule {}
通过这种方式,您可以在拦截器中订阅并使用响应,确保返回Observable发出值。