我有一个我需要导出的模块,但我希望在所有异步操作完成后导出它。 基本上,我需要导出的模块是" 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}
有什么想法吗?
答案 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();