【发布时间】:2020-07-05 22:16:48
【问题描述】:
我已经实现了 Http Interceptor 并在服务启动时显示微调器,并在服务成功/失败时隐藏微调器。
代码示例:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse && event.body.errCode != undefined) {
// show_spinner
}
}),
finalize(()=>{
// hide_spinner
})
}
例如有两个服务调用同时发生;因此,微调器将显示对应于两个调用,但第一个服务在 2 秒 内完成,第二个服务在 5 秒 内完成;现在微调器将在第一次调用完成后隐藏,将无法确认第二次服务调用。
【问题讨论】:
-
我建议使用操作符,而不是 Http Interceptor,见stackoverflow.com/questions/60207721/…,否则你需要有一个计数
-
增加和减少飞行中调用的计数,如果它 > 0 则显示微调器?
-
你看到SO了吗?运营商适用于订阅-而不是呼叫-。这允许在 forkJoin 或 switchMap 中使用,因此您没有“并发”调用
-
非常明显@Eliseo 我的目标是不避免调用并发,因为这些调用是异步的;它们可能几乎同时发生,但要找到一个逻辑来确认每个服务调用。
-
我以为你的目的是在通话结束时显示一个微调器,我个人认为创建一个接线员的想法是最好的解决方案,但这只是个人意见
标签: angular rxjs httprequest interceptor angular-http-interceptors