Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 Array.push()无法使用mongoose_Javascript_Arrays_Mongoose_Nodes_Mean Stack - Fatal编程技术网

Javascript 节点js Array.push()无法使用mongoose

Javascript 节点js Array.push()无法使用mongoose,javascript,arrays,mongoose,nodes,mean-stack,Javascript,Arrays,Mongoose,Nodes,Mean Stack,我是meanstack开发的初学者。我试图在foreach循环中的数组内推送值,但最后得到的是空数组 我的代码: router.get("/", function(req, res) { ourpackage.find({}).sort({_id:1}).exec(function(err,resdoc){ var rest = []; resdoc.forEach(function(doc){ masterRoomimage.find({ourpackageId:doc.

我是meanstack开发的初学者。我试图在foreach循环中的数组内推送值,但最后得到的是空数组

我的代码:

router.get("/", function(req, res) {

 ourpackage.find({}).sort({_id:1}).exec(function(err,resdoc){

  var rest = [];
  resdoc.forEach(function(doc){
    masterRoomimage.find({ourpackageId:doc._id},function(err,ourpackageimagevalue){
      if(err) res.send(err);
      var ourpackagedetail = JSON.parse(JSON.stringify(doc));
      var stringifyimages = JSON.parse(JSON.stringify(ourpackageimagevalue));
      var ourpackage = _.merge({},ourpackagedetail,{masterRoomimages:stringifyimages});
      rest.push(ourpackageimagevalue);
             //print all rest array value
             console.log(rest);
           });
  });
      //print empty rest array value
      console.log(rest);
      res.send(rest);
    });
});
我们的包模式

  {
            "_id": "58e396d4215bc61338d2c06e",
            "first_title": "test 1",
            "berief_text": "<p>testing </p>",
   }
预期产量

[
    {
        "_id": "58e396d4215bc61338d2c06e",
        "first_title": "test 1",
        "berief_text": "<p>testing </p>",
        "ourpackagesimages": [
            {
                "_id": "59424d49fcc8100050916bf4",
                "imageLocation": "first.jpg",
                "ourpackageId": "58e396d4215bc61338d2c06e",
                "__v": 0
            },
            {
                "_id": "59490ad44e26c13324906433",
                "imageLocation": "second.jpg",
                "ourpackageId": "58e396d4215bc61338d2c06e",
                "__v": 0
            }

        ]
    }
]

不能在同步函数中调用异步函数(在本例中为forEach)。结果在收集之前就被访问了,这就是空数组输出的原因

为此目的,有一个非常方便且易于使用的库。对于您的特定用例,或函数就可以了

var async = require('async');

router.get("/", function(req, res) {
    ourpackage.find({}).sort({
        _id: 1
    }).exec(function(err, resdoc) {

        async.mapLimit(resdoc, 5, function(doc, callback){
            masterRoomimage.find({
                ourpackageId: doc._id
            }, function(err, ourpackageimagevalue) {
                if (err) return callback(err);

                var ourpackagedetail = JSON.parse(JSON.stringify(doc));
                var stringifyimages = JSON.parse(JSON.stringify(ourpackageimagevalue));
                var ourpackage = _.merge({}, ourpackagedetail, {
                    masterRoomimages: stringifyimages
                });
                return callback(null, ourpackageimagevalue);
            });

        }, function(err, rest) {
            if(err){
                res.send(err);
            }
            else{
                res.send(rest);
            }
        });
    });
});

不能在同步函数中调用异步函数(在本例中为forEach)。结果在收集之前就被访问了,这就是空数组输出的原因

为此目的,有一个非常方便且易于使用的库。对于您的特定用例,或函数就可以了

var async = require('async');

router.get("/", function(req, res) {
    ourpackage.find({}).sort({
        _id: 1
    }).exec(function(err, resdoc) {

        async.mapLimit(resdoc, 5, function(doc, callback){
            masterRoomimage.find({
                ourpackageId: doc._id
            }, function(err, ourpackageimagevalue) {
                if (err) return callback(err);

                var ourpackagedetail = JSON.parse(JSON.stringify(doc));
                var stringifyimages = JSON.parse(JSON.stringify(ourpackageimagevalue));
                var ourpackage = _.merge({}, ourpackagedetail, {
                    masterRoomimages: stringifyimages
                });
                return callback(null, ourpackageimagevalue);
            });

        }, function(err, rest) {
            if(err){
                res.send(err);
            }
            else{
                res.send(rest);
            }
        });
    });
});
简单地说, 声明数组 剩余=[]

rest[] = ourpackageimagevalue;
我希望这有帮助,

简单地说, 声明数组 剩余=[]

rest[] = ourpackageimagevalue;

我希望它能有所帮助,

请小心:
forEach
是同步的,而
find
是异步的。我认为如图所示使用
aggregate
可能对您有用。请注意:
forEach
是同步的,而
find
是异步的。我认为使用如图所示的
aggregate
可能对您有用。我得到了错误SyntaxError:Unexpected token]我得到了错误SyntaxError:Unexpected token]Hi username:@TalhaAwan我了解异步和同步函数上述任何其他解决方案都提到了用于合并两个集合的输出(我们的套餐系列和套餐图像系列)@Senthil,你在问另一个问题吗?很抱歉,我没听懂。请详细说明。谢谢你的快速回复。上面我提到了1.ourpackages模式,2.ourpackageimages模式,最后我想要预期的输出。嗨,用户名:@TalhaAwan我了解异步和同步函数。上面提到的任何其他用于合并的解决方案的输出两个集合(我们的软件包集合和我们的软件包图像集合)@Senthil,你在问另一个问题吗?很抱歉,我没听懂。请你详细说明一下。谢谢你的快速回复。上面我提到了1.ourpackages模式,2.ourpackageimages模式,最后我想要预期的输出。