Я пытаюсь создать перехватчик Http для отображения загрузки на всех страницах. Но я не могу отклонить контроллер загрузки
Я следовал этому https://www.youtube.com/watch?v=IJWCpa_-MeU Но проблема загрузки отображается бесконечно.
На самом деле я немного новичок к этим понятиям. Поэтому, пожалуйста, помогите мне.
Большое спасибо
Я отредактировал свой код. Пожалуйста, найдите изображение значения console.log. Существует проблема, если вы делаете несколько запросов Http на одной странице. Он создает загрузчик, даже если старый существует.
@Injectable()
export class HttpRequestInterceptor implements HttpInterceptor {
constructor(
private loadingCtrl: LoadingController,
private toastCtrl: ToastController,
private alertCtrl: AlertController,
// private fakeHttp: FakeHttpService
) {}
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
this.loadingCtrl.getTop().then(hasLoading => {
if (!hasLoading) {
console.log("loading")
this.loadingCtrl.create({
spinner: 'circular',
translucent: true
}).then(loading => loading.present());
}
});
return next.handle(request).pipe(
catchError(err => {
if (err instanceof HttpErrorResponse) {
switch ((<HttpErrorResponse>err).status) {
case 401:
// return this.handle401Error(request, next);
// handle 401 here
console.log("401")
default:
return throwError(err);
}
} else {
return throwError(err);
}
}),
retryWhen(err => {
let retries = 1;
return err.pipe(
delay(1000),
tap(() => {
// this.showRetryToast(retries);
}),
map(error => {
if (retries++ === 3) {
throw error; // Now retryWhen completes
}
return error;
})
);
}),
catchError(err => {
// this.presentFailedAlert(err.error['msg']);
return EMPTY;
}),
finalize(() => {
console.log("hii")
this.loadingCtrl.getTop().then(hasLoading => {
if (hasLoading) {
this.loadingCtrl.dismiss();
}
});
})
);
}
Вот простой Http-запрос, который я сделал, но данные отображаются в console.log, но загрузка не прекращается
ngOnInit() {
this.cartService.getProductDetails().subscribe(data =>{
this.products = data;
this.filter_products = this.products;
console.log(this.products)
})