因此,在我的Node文件中,我从Mongoose数据库中获取了一些数据,执行了一些操作,并且我希望在末尾使用字典这样的对象。现在,我的Mongoose数据库只有我想要的两个对象,因此我使用aggregate
命令来给我这些对象。然后,我遍历结果,并将其添加到字典中。然后,我想显示字典中的内容。由于所有这些都是异步的,因此我不得不学习/使用承诺。因此,这是我生成的代码:
function f1(){
return new Promise(resolve=>{
collectionName.aggregate([
{
$group:
{
_id: "$ids",
property: {$max: "$properties"}
}
}
]).then(data=>{
for(i=0; i<data.length; i++){
dictionary[data[i]['_id']] = data[i]['property'];
}
});
resolve(dictionary);
});
};
async function f2(){
var dict = await f1()
console.log(dict)
f1();
f2();
当我将console.log放入for循环中时,我得到了想要的数据,因为它具有id和字典形式的属性。但是,当我运行f2时,我仅得到{}
作为输出。有人知道为什么吗?
答案 0 :(得分:0)
由于resolve(dictionary)
在aggregate()
的{{1}}之外,它在填充then()
之前执行,因此为空对象。尝试将dictionary
移动到resolve(dictionary)
的{{1}}内部,而不是返回值为then()
的Promise。实际上,您正在尝试chain promises。确保还同时返回整个aggregate()
,以确保整个承诺都从dictionary
返回。
collectionName.aggregate()
希望有帮助!