Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js阵列仪表板_Javascript_Node.js_Backend - Fatal编程技术网

Javascript 节点js阵列仪表板

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 = [];

我正在用node js做我的应用程序的后端。在本例中,我试图获得典型的仪表板,如facebook、instagram等,。。。。 其中,对于一个用户,我试图获得他所关注的用户。当我得到一组跟随的用户时,我会找到他们拥有的“receta”(一个用户可以拥有多个)。最后,我将所有这些receta添加到一个数组中,但问题是返回的是空的

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)
完成之前调用了code>

仅当循环完成并返回receta时调用res.send。

res.send(myarray)
完成之前调用了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}]