等待后导出ES6模块

时间:2018-05-09 12:47:30

标签: javascript async-await

我有一个我需要导出的模块,但我希望在所有异步操作完成后导出它。 基本上,我需要导出的模块是" async ready"在我出口的时候

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 :(得分:1)

这是我们在Javascript中遇到的red-blue问题的一部分,基本上没有一个好的解决方案。一旦你引入了异步性,你就会一直异步。如果你试图等待,任何等待的函数都将是一个承诺工厂。正如所建议的那样,你最好的选择是回复一个承诺,但是如果不能做任何一种线程阻止你就会陷入承诺之地。

答案 1 :(得分:1)

在撰写本文时,在模块范围内使用await 不可能

尝试重写模块以导出将使用async / await功能的方法。

没有混合异步和顺序代码的选项。你必须全力以赴! (如 TheCog 的回答:http://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/

中所述

答案 2 :(得分:0)

我能够逃脱它,但基本上由于我的用例 基本上,我有一个反应应用程序,有问题的模块是初始化我所有商店和服务的模块

所以当我导入它并将它传递给主反应组件之前,我最终通过等待它来解决它

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();