最初,我在文件内部有一个空数组,但是在执行代码期间,我从数据库中获取数据并将数据推入数组。我的代码如下所示:
items.js
const items = [];
const init = (connection) => {
return connection.collection('collectionName')
.aggregate([{
....
}])
.toArray()
.then(result => {
items.push(...result);
return result;
});
};
module.exports = {
init,
all: items,
item1: items[0],
item2: roles[1],
};
当我尝试全部导入时,使用require在类似这样的不同文件中导入item1和item2:
const { all, item1, item2 } = require('../data/items');
我得到了所有带有对象的数组,但未获得item1和item 2的定义。我似乎无法理解问题所在。我知道我可以在导出时使用匿名函数并以这种方式获取数据,但是我宁愿通过尝试按元素索引从数组访问数据来做到这一点。非常感谢所有帮助!
我得到了所有对象的数组
有了该代码,您就不应该这样做。大概您init
在某个时候打电话了。
但是对于item1和item 2不确定。我似乎无法理解问题所在。
在阅读items[0]
以将其分配给要导出的对象时,异步功能尚未完成,因此该数组仍为空数组。
您可以item1
用一个getter代替,该getter在您尝试读取该属性时会获取当前值,但是这可能仍然会使items[0]
您陷入竞争状况。item1
更好的解决方案可能是在提取完成后导出一个评估为对象的promise。
显然,您将需要使用then()
或await
导出的值。您不会直接从中获取对象import
。
const init = async (connection) => {
const items = await connection.collection('collectionName')
.aggregate([{
....
}])
.toArray()
return {
all: items,
item1: items[0],
item2: roles[1], // whatever roles is
}
};
module.exports = init();
和
const promise = require('../data/items');
const { all, item1, item2 } = await promise;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句