我的最终目标是让module.exports包含一些在应用程序初始化期间加载的DB值
我试过以下
module.exports = (async function() {
const cities = await internalUsage.aggregate(citiesPipeline);
console.log("HandleCities - Cities loaded")
return cities[0].cities;
})();
但这给了我一个承诺
你知道怎么做吗?
**更新**
目前我正在使用全局,如果有人有解决方案可以将其保留在模块中,我很乐意听到
遗憾的是,仅使用module.exports
是不可能做到这一点的。由于函数是async
,所以当使用香草NodeJSmodule.exports
时,你能得到的最好的东西是Promise
。
如果你能为它await
,这也没那么糟糕。module.exports
就像一个工厂,无论你require
多少次,都只会生成一个Promise。
const citiesPromise = require('./XXXXX_XXXXX');
(async function(){
const cities = await citiesPromise();
...
});
另一种解决方案是使用支持asynchronous factory
的Dependency Injection
(DI(来抽象NodeJS模块。这将允许您导出Promise
并将其值作为注入获取。
并不是所有的NodeJS DI都为async
值提供了这种抽象,所以在选择DI-lib时要小心。
您可以检查InversifyJS
,尽管它鼓励使用TypeScript,但它有ES6示例https://github.com/inversify/InversifyJS/blob/master/wiki/basic_js_example.md.