Проблема с проблемой гонки условий при загрузке перехватчика в Angular - PullRequest
0 голосов
/ 05 августа 2020

У меня есть несколько проблем с моим перехватчиком загрузки и предполагаемая гонка условий, которая вызывает эту ошибку: Uncaught (in promise) overlay does not exist когда-то появляется в моем перехватчике загрузки / службе. до 5) http-вызовы на некоторых страницах, я решил создать перехватчик, который подсчитывал http-запросы для представления и отклонения наложения загрузки. Выглядит это примерно так:

export class LoadingInterceptor implements HttpInterceptor {

  private totalRequests = 0;

  constructor(private loading: LoadingService) { }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    this.totalRequests++;

    if (this.totalRequests === 1) {
      this.loading.present();
    }

    return next.handle(request).pipe(
      finalize(() => {
        this.totalRequests--;
        if (this.totalRequests === 0) {
          this.loading.dismiss();
        }
      })
    );
  }
}

Для моей службы загрузки я попытался с помощью logi c проверить, присутствовал ли загрузчик в обратном вызове, используя флаг true / false, а затем либо присутствует, либо отклоните его.

isLoading = false;

  constructor(
    public loadingController: LoadingController
  ) { }

  async present() {
    this.isLoading = true;
    return await this.loadingController.create({
      spinner: "circular",
      translucent: true
    }).then(a => {
      a.present().then(() => {
        if (!this.isLoading) {
          a.dismiss().then(() => this.isLoading = false);
        }
      });
    });
  }

  async dismiss() {
    this.isLoading = false;
    return await this.loadingController.dismiss().then(() => this.isLoading = false);
  }

Однако, как я уже упоминал, время от времени у меня все еще возникает проблема гонки условий, когда возникает ошибка. У кого-нибудь есть мысли о том, что может вызвать проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...