【发布时间】:2020-04-02 07:21:58
【问题描述】:
目前我正在尝试使用 Angular HttpInterceptor 来显示一个微调器一次,因此它不会在每次 HttpRequest 完成时闪烁。我的interceptor.service.ts 的当前代码如下所示:
@Injectable()
export class InterceptorService implements HttpInterceptor {
constructor(private spinnerService: SpinnerService) {}
showSpinner() {
this.spinnerService.show.next(true);
console.log('true');
}
hideSpinner() {
this.spinnerService.show.next(false);
console.log('false');
}
intercept(
req: HttpRequest<any>,
next: HttpHandler,
): Observable<HttpEvent<any>> {
const responseTimer$ = next
.handle(req)
.pipe(filter(e => e instanceof HttpResponse));
timer(300)
.pipe(takeUntil(responseTimer$))
.subscribe(() => this.showSpinner());
return next.handle(req).pipe(
tap(evt => {
if (evt instanceof HttpResponse) {
this.hideSpinner();
}
}),
);
}
}
但是如果我尝试这段代码,控制台会说:
interceptor.service.ts:20 true
interceptor.service.ts:25 false
4 x interceptor.service.ts:20 true
4 x interceptor.service.ts:25 false
5 x interceptor.service.ts:25 false
interceptor.service.ts:25 false
但在我看来,它应该是正确的 x 次,最后是错误的。我希望你能理解我想要归档的内容。
【问题讨论】:
标签: javascript angular typescript spinner angular-http-interceptors