@waltaki

Angular intercept — как сделать что-то, при abort запроса из вне?

Здравствуйте.

У меня есть intercept, который при появление запроса делает анимацию загрузки на странице.
Но, проблема в том, что когда например, на самой странице происходит ngOnDestroy, и происходит отписка от запроса, он отменяется (происходит вызов abort запроса), в результате чего, теперь я и не узнаю в intercept, что с этим запросом, то есть, я и не завершаю анимацию, и она так будет до бесконечности.

// component
private getUsersSubscription: Subscription;
ngOnInit() {
  this.getUsersSubscription = this.gsService.getUsers().subscribe(response => {
    // бла бла бла
  });
}

ngOnDestroy() {
  if(this.getUsersSubscription) this.getUsersSubscription.unsubscribe();
}

// intercept
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
	
  this.visoad.startLoading();
	
  return next.handle(req).pipe(
    map((event: HttpEvent<any>) => {
			
      this.visoad.completeLoading();
			
      return event;
    }),
    catchError((err: any, caught) => {
      if (err instanceof HttpErrorResponse) {
				
        this.visoad.completeLoading();
				
        return observableThrowError(err);
      }
    })
  );
}
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Странно, вы должны завершать анимацию сразу по совершению запроса. потому что сначала в map попадет HttpEvent со статусом Sent, он будет всегда независимо от получения ответа.

А так вот что удалось придумать https://stackblitz.com/edit/angular-m3quu3?file=sr...
не совсем изящно, но работает, видно какие запросы были отменены, а какие успешны.

Ну и следует просто завершать анимацию в finalize, независимо от статуса.
Кстати что будет, если запросов одновременно будет несколько?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы