javascript - Node js Array.push() 无法使用 mongoose 工作

标签 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._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": "59424d49fcc8100050916bf4",
                "imageLocation": "first.jpg",
                "ourpackageId": "58e396d4215bc61338d2c06e",
                "__v": 0
            },
            {
                "_id": "59424d49fcc8100050916bf5",
                "imageLocation": "third.jpg",
                "ourpackageId": "58e396d4215bc61338d2c077",
                "__v": 0
            },
            {
                "_id": "59490ad44e26c13324906433",
                "imageLocation": "second.jpg",
                "ourpackageId": "58e396d4215bc61338d2c06e",
                "__v": 0
            }
    ]

预期输出

[
    {
        "_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)。结果在收集之前被访问,这就是空数组输出的原因。

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

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);
            }
        });
    });
});

关于javascript - Node js Array.push() 无法使用 mongoose 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971967/

相关文章:

javascript - 由 JQuery load() 注入(inject) DIV 的 PHP 文件可以找到有关该 DIV 的任何信息吗?

javascript - 单击选中/取消选中仅工作 2 次然后不起作用

javascript - ReactJS 中的文件处理

javascript - Bluebird promisify 不包装节点样式函数

javascript - React TypeError : skills. 映射不是函数

node.js - Express 无法 PUT/DELETE 方法。出了什么问题?

javascript - 如何从二维数组中删除子数组?

javascript - 视觉二维数组中的动画

c - C 中的锯齿状数组 (3D)

javascript - 排序对象数组