Вызов Promise вызывается дважды в Angular 11

#promise #es6-promise #angular-promise

#обещание #es6-обещание #angular-обещание

Вопрос:

У меня есть приведенный ниже код, который вызывает службу для получения некоторых значений, я сознательно отключил серверную часть, чтобы проверить, добавляется ли ошибка. Я заметил, что он дважды вызывает сервис, может кто-нибудь объяснить мне, почему это происходит?

 (async () => {
      try {
        this.countries = await this.testerSvc.getCountries().toPromise();
      } catch (err) {
        this.addError("Countries");
      }
    })();
 

Сервисный код:

 getCountries() {
    return this.http.get<[]>(this.baseUrl   "countries");
}
 

Комментарии:

1. Куда именно вы поместили код из своего первого фрагмента?

2. @Bergi Это внутри конструктора моего компонента.

3. Итак, что-то создает экземпляр этого компонента дважды. Однако я бы рекомендовал избегать помещения асинхронных побочных эффектов в конструктор.

4. Нашел мою проблему. Я добавил свой компонент в раздел начальной загрузки app.module.ts: bootstrap: [AppComponent, MyComponent]. Я удалился оттуда, и теперь он вызывает сервис только один раз. Спасибо!

Ответ №1:

В моем app.module.ts я добавил свой компонент:

 bootstrap: [AppComponent, MyComponent]
 

На моем app.component.html , у меня было

 <app-tester> </app-tester>
 

Он создавал экземпляр моего компонента дважды, я удалил его из начальной загрузки, и теперь он создается только один раз. Таким образом, вызов службы выполняется только один раз.