Я использую http-перехватчик, чтобы добавить loadingController ко всем вызовам API, подобным этому
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
const token = "my-token-string-from-server";
if (token) {
request = request.clone({
setHeaders: {
Authorization: token
}
});
}
if (!request.headers.has("Content-Type")) {
request = request.clone({
setHeaders: {
"content-type": "application/json"
}
});
}
request = request.clone({
headers: request.headers.set("Accept", "application/json")
});
this.presentLoading();
return next.handle(request).pipe(
map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
console.log("event--->>>", event);
//this.hideLoader();
}
this.hideLoader();
return event;
}),
catchError((error: HttpErrorResponse) => {
console.error(error);
this.hideLoader();
return throwError(error);
})
);
}
в том же файле ts. У меня есть функции контроллера загрузки, подобные этой
async presentLoading() {
const loading = await this.loadingController.create({
message: "Loading, Please Wait..."
// duration: 5000
});
await loading.present();
const { role, data } = await loading.onDidDismiss();
console.log("Loading dismissed!");
}
hideLoader() {
this.loadingController.dismiss();
}
Однако, когда я делаю вызов API, я получаю событие event--->>>
в консоли, но loadingController не отклоняется.
PS Если я добавляю duration
к loadingController, иногда loadingController отклоняется несколько секунд, прежде чем API возвращает данные.