最初,我在文件中有一个空数组,但在代码执行期间,我从数据库中获取数据并将数据推送到数组中。我的代码如下所示:
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导入all,item1和item2时,如下所示:
const { all, item1, item2 } = require('../data/items');
我以object作为all获得数组,但item1和Item2未定义。我似乎不明白问题是什么。我知道在导出数据时可以使用一个nonumous函数,并以这种方式获取数据,但我更愿意通过尝试按元素的索引访问数组中的数据。非常感谢所有的帮助!
我得到了数组,object as all
考虑到那个代码,你不应该。不过,您可能会在某个时候调用init
。
但未定义item1和Item2。我似乎不明白问题是什么。
当您读取items[0]
以将其分配给要导出的对象时,异步函数尚未完成,因此数组仍然是空数组。
您可以在尝试读取item1
属性时用获取item1
的当前值的getter替换item1
,但这可能仍然会导致争用条件。
更好的解决方案可能是导出一个promise,一旦提取完成,该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;