Функция импорта изнутри возвращает ZoneAwarePromise - PullRequest
0 голосов
/ 02 июля 2019

Импорт внутри функции возвращает ZoneAwarePromise

Ниже приведен код, который я использую

page_types = [
  {
    name: 'anime',
    loadComponent: () => import('./anime/anime.component').then(c => c.AnimeComponent)
  }
];

getPageType(name){
  for (var i=0; i < this.page_types.length; i++) {
    if (this.page_types[i].name == name) {
      return this.page_types[i].loadComponent();
    }
  }
}

constructor(
   console.log(this.getPageType('anime'));
){}

ответ в консоли

ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value:Array (0)}

Я ожидал, что на выходе будет класс компонента

1 Ответ

1 голос
/ 02 июля 2019

import('./anime/anime.component') является асинхронной операцией, поэтому функция loadComponent возвращает Promise , в свою очередь getPageType(name) также возвращает Promise. таким образом, ожидается, что ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: Array (0)} в журнале консоли.

Если вам нужен класс компонента в журнале консоли, вы должны обработать возвращенное обещание.

  constructor() { 
    this.getPageType('anime').then(x => {
      console.log(x.name);
    })
  }
...