Javascript 承诺解析对象给空对象
所以在我的节点文件中,我从Mongoose数据库中获取一些数据,执行一些操作,最后我想要一个类似字典的对象。现在我的Mongoose数据库只有两个我想要的对象,所以我使用Javascript 承诺解析对象给空对象,javascript,promise,Javascript,Promise,所以在我的节点文件中,我从Mongoose数据库中获取一些数据,执行一些操作,最后我想要一个类似字典的对象。现在我的Mongoose数据库只有两个我想要的对象,所以我使用aggregate命令来提供这些对象。然后,我循环遍历结果,并将它们添加到字典中。然后,我想显示字典中的内容。由于这一切的异步性,我不得不学习/使用承诺。因此,这是我生成的代码: function f1(){ return new Promise(resolve=>{ collectionN
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();
函数f1(){
返回新承诺(解析=>{
collectionName.aggregate([
{
$group:
{
_id:“$ids”,
属性:{$max:$properties}
}
}
])。然后(数据=>{
对于(resolve(dictionary)
位于aggregate()
的then()
之外的(i=0;i),它在填充dictionary
之前执行,因此为空对象。请尝试将resolve(dictionary)
移动到aggregate()的then()
内部
而不是返回值为字典的承诺。实际上,您正在尝试。请确保同时返回collectionName.aggregate()
作为一个整体,以确保从f1()
返回整个承诺
函数f1(){
返回新承诺(解决=>{
return collectionName.aggregate([{
$group:{
_id:“$ids”,
财产:{
$max:“$properties”
}
}
}])。然后(数据=>{
对于(i=0;i
希望这能有所帮助!就这么简单……不过为了理解,我不应该在我称之为承诺的同一级别(即,在当时之外)解决承诺吗?我似乎无法理解为什么它应该在协议内部,这只是执行时间的问题。解决(字典)
在函数aggregate()
解析之前执行。在then()中返回resolve(dictionary)
,一旦aggregate()
成功解析,则返回已解析的承诺。
function f1() {
return new Promise(resolve => {
return collectionName.aggregate([{
$group: {
_id: "$ids",
property: {
$max: "$properties"
}
}
}]).then(data => {
for (i = 0; i < data.length; i++) {
dictionary[data[i]['_id']] = data[i]['property'];
}
return resolve(dictionary);
});
});
}