Javascript 节点js阵列仪表板
我正在用node js做我的应用程序的后端。在本例中,我试图获得典型的仪表板,如facebook、instagram等,。。。。 其中,对于一个用户,我试图获得他所关注的用户。当我得到一组跟随的用户时,我会找到他们拥有的“receta”(一个用户可以拥有多个)。最后,我将所有这些receta添加到一个数组中,但问题是返回的是空的Javascript 节点js阵列仪表板,javascript,node.js,backend,Javascript,Node.js,Backend,我正在用node js做我的应用程序的后端。在本例中,我试图获得典型的仪表板,如facebook、instagram等,。。。。 其中,对于一个用户,我试图获得他所关注的用户。当我得到一组跟随的用户时,我会找到他们拥有的“receta”(一个用户可以拥有多个)。最后,我将所有这些receta添加到一个数组中,但问题是返回的是空的 getDashboard = function (req, res) { var myarray = new Array(); //myarray = [];
getDashboard = function (req, res) {
var myarray = new Array();
//myarray = [];
User.findById(req.params.id, function (err, user) {
if (!user) {
res.send(404, 'User not found');
}
else {
var a = user.following;
a.forEach(function (current_value) {
Receta.find({ "user_id": current_value._id }, function (err, recetas) {
if (!err) {
recetas.forEach(function (receta) {
myarray.push(receta);
}
} else {
console.log('Error: ' + err);
}
});
})
res.send(myarray);
}
});
};
res.send(myarray)由于Receta.find是I/O,因此在a.forEach
完成之前调用了code>
仅当循环完成并返回receta时调用res.send。res.send(myarray)由于Receta.find是I/O,因此在a.forEach
完成之前调用了code>
仅当循环完成并返回receta时调用res.send。您正在处理一个常见的异步问题
Receta.find
是异步的,它不是阻塞操作,因此在所有Receta.find
调用完成之前调用res.send
。您可以通过使用解决此问题,前提是在您的节点版本中提供了:
var a = user.following;
var promises = a.map(function(current_value) {
return new Promise(function(resolve, reject) {
Receta.find({"user_id":current_value._id}, function (err, recetas) {
if(!err) {
resolve(recetas);
} else {
reject(err);
}
});
});
});
Promise.all(promises).then(function(allData) {
res.send(allData);
}).catch(function(error) {
res.send(error);
});
如果本机承诺不可用,您可以使用类似于或的库来处理常见的异步问题
Receta.find
是异步的,它不是阻塞操作,因此在所有Receta.find
调用完成之前调用res.send
。您可以通过使用解决此问题,前提是在您的节点版本中提供了:
var a = user.following;
var promises = a.map(function(current_value) {
return new Promise(function(resolve, reject) {
Receta.find({"user_id":current_value._id}, function (err, recetas) {
if(!err) {
resolve(recetas);
} else {
reject(err);
}
});
});
});
Promise.all(promises).then(function(allData) {
res.send(allData);
}).catch(function(error) {
res.send(error);
});
如果本机承诺不可用,您可以使用类似或的库为您修复格式设置(请下次自己执行),并且您在
forEach
之后缺少一个结束)
。因此,在原始的.forEach(function(){…}
中看起来是这样的,没有关闭)
为您修复了格式设置(请下次自己执行),并且在forEach
之后缺少关闭)
。所以在原始的.forEach(function(){…}
中看起来是这样的,没有关闭)
谢谢这帮助了我!!但是对于receta(对于查找的每个insde),我可以这样做,因为一个用户可以有多个receta,目前我会有类似的东西[{obj1}、{obj2}、{ob3}],我想要这个[{obj1}、{obj2}、{obj3}],谢谢这帮了我!!但是对于receta(对于查找的每个insde),我可以这样做,因为一个用户可以有多个receta,目前我会有类似的东西[{obj1}、{obj2}、{ob3}],我想要这个[{obj1}、{obj2}、{obj3}]