Как экспортировать переменные, объявленные в функции .then () - PullRequest
0 голосов
/ 20 февраля 2020

Я создаю angular приложение с одним спа. Когда мы интегрируем одну функцию spa с существующим приложением angular, она создает новый основной файл и учитывает это при запуске приложения. Теперь меня беспокоит то, что я использую некоторые асинхронные операции c и выполняю их при запуске приложения, как показано ниже в основном файле. js:

resolveAsyncServices([
    {
        provide: XYZ,
        useFactory: () => XYZ.getUserLocale()
    },
    {
        provide: ABC,
        useFactory: (ABCData: Locale) => LocaleServiceNg.getUserTimezone(ABCData),
        deps: [PQR]
    },

])
  .then((providers: Array<StaticProvider>) => {
        platformBrowserDynamic(providers)
            .bootstrapModule(AppModule);
    })
    .catch(console.error);

, когда один спа-центр загружает свой собственный главный файл в Приложение выглядит следующим образом:

const lifecycles = singleSpaAngular({
  bootstrapFunction: singleSpaProps => {
    singleSpaPropsSubject.next(singleSpaProps);
    return platformBrowserDynamic().bootstrapModule(AppModule);
  },
  template: '<app-root />',
  Router,
  NgZone: NgZone,
  AnimationEngine: AnimationEngine,
});

export const bootstrap = lifecycles.bootstrap;
export const mount = lifecycles.mount;
export const unmount = lifecycles.unmount;

Я хотел рассмотреть мою функцию resolAsyncServices с помощью одного файла загрузчика spa. Так что для этого я пытаюсь ниже код:

resolveAsyncServices([
    {
        provide: XYZ,
        useFactory: () => XYZ.getUserLocale()
    },
    {
        provide: ABC,
        useFactory: (ABCData: Locale) => LocaleServiceNg.getUserTimezone(ABCData),
        deps: [PQR]
    },

])
  .then((providers: Array<StaticProvider>) => {
       const lifecycles = singleSpaAngular({
       bootstrapFunction: singleSpaProps => {
          singleSpaPropsSubject.next(singleSpaProps);
          return platformBrowserDynamic(providers).bootstrapModule(AppModule);
       },
       template: '<ct-root />',
       Router,
       NgZone: NgZone,
       AnimationEngine: AnimationEngine,
  });

  export const bootstrap = lifecycles.bootstrap;
  export const mount = lifecycles.mount;
  export const unmount = lifecycles.unmount; 
})
.catch(console.error);

, но это дает мне ошибки в последних строках экспорта. Итак, теперь, как мне экспортировать методы, чтобы это можно было рассмотреть по angular.

1 Ответ

0 голосов
/ 20 февраля 2020

Вы не можете экспортировать вещи в функции .then(). Слишком поздно, поскольку экспорт модуля уже был возвращен до запуска обработчика .then().

Начиная с текущего состояния node.js, экспорт должен быть синхронным, а все функции .then() не являются синхронными. Обычно решение состоит в том, чтобы экспортировать обещание или экспортировать функцию, которую можно вызвать, чтобы получить обещание, и тогда вызывающая сторона может использовать .then(), чтобы получить значение, которое они хотят получить из этого обещания.

Есть люди, работающие над асинхронной загрузкой модулей, которые позволят асинхронно извлекать экспорт, но это еще не все.

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