экспортировать модуль ES6 после ожидания - PullRequest
0 голосов
/ 09 мая 2018

У меня есть модуль, который нужно экспортировать, но я хочу экспортировать его после завершения всех асинхронных операций. По сути, мне нужно, чтобы экспортированный модуль был «готов к асинхронности» во время его экспорта

class Store{
   async dummy(){
      await somethingElse()
   }
}

const store = new Store();
//at this point, before exporting it, I want to
await store.dummy()
//but since I am not in a function, I cannot await it
export {store}

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Использование await в области видимости модуля невозможно на момент написания.

Попробуйте переписать модуль, чтобы экспортировать метод, который будет использовать функциональность async / await.


Нет возможности смешивать асинхронный и последовательный код. Вы должны пойти ва-банк! (Как описано в ответе TheCog : http://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/)

0 голосов
/ 10 мая 2018

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

Итак, я решил ее, ожидая, когда импортирую и перед передачей основному компоненту реакции

const load = async () => {
    const rootEl = document.getElementById('app');
    //below the solution
    **await bootstrap.RootStore.init();**
    routeInit(bootstrap.RootStore.getService('logger'), bootstrap.RootStore.UIStore);
    render(
        <Provider {...bootstrap}>
            <Router history={browserHistory} onUpdate={bootstrap.RootStore.UIStore.trackPage} routes={routes} />
        </Provider>,
        rootEl
    );
}

load();
0 голосов
/ 09 мая 2018

Это является частью красно-синей проблемы, с которой мы сталкиваемся в Javascript, и в основном нет хорошего решения.Как только вы ввели асинхронность, вы полностью асинхронны.Если вы попытаетесь дождаться, любая ожидающая функция будет по умолчанию фабрикой обещаний.Как и было предложено, лучше всего вернуть обещание, но, не имея возможности блокировать какие-либо потоки, вы застряли в стране обещаний.

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