2017-07-17 66 views
1

我有一个这样的图像数组。在nodejs中添加猫鼬对象到数组

var newImageParams = [ 
    { 
     image_string: "hello", 
     _type: "NORMAL" 
    }, 
    { 
     image_string: "hello", 
     _type: "NORMAL" 
    } 
    ] 

我使用蒙戈db和在的NodeJS,我使用的猫鼬,一切都很好,我可以将数据添加到猫鼬表,但添加每个图像后,我试图得到的对象保存到一个数组,其中在执行console.log正在发生的事情,右为好,但是当我返回数组,没有什么在它和它空

if (newImageParams) { 
    for (var i = newImageParams.length - 1; i >= 0; i--) { 
    // allImages[i] 
    var newImage = new Image(Object.assign(newImageParams[i], {bike: bike._id})); 
    newImage.save(function(err, image){ 
     console.log(image); 
     allImages.push(image); 
     console.log(allImages); 
    }); 
    } 
} 

这是我在做什么,一切是正确的,并在控制台不错,但当我最后回来时,

res.json({bike: bike, images: allImages }); 

图像数组是完全空的,因为它是当宣布?为什么发生这种情况,请帮助

+0

发布完整的代码块 –

回答

2

我敢打赌,在回调完成之前发送回复。

的方便,快捷的解决办法:

if (newImageParams) { 
    for (var i = newImageParams.length - 1; i >= 0; i--) { 
    const image = Object.assign(newImageParams[i], {bike: bike._id}); 
    var newImage = new Image(image); 
    allImages.push(image); 
    newImage.save(function(err, image){ 
     console.log(image); 
     console.log(allImages); 
    }); 
    } 
} 

我将添加正确的做法与异步/ AWAIT,旧版本将使用Promise.allasync.parallel

async function doJob() { 
    if (newImageParams) { 
    for (var i = newImageParams.length - 1; i >= 0; i--) { 
     const image = Object.assign(newImageParams[i], {bike: bike._id}); 
     const newImage = new Image(image);  
     await newImage.save(); 
     allImages.push(image); 
    } 
    } 
} 
+0

为什么不能将实际的图像对象添加到数组? –

+0

@JunaidFarooq我已经更新了我的答案,希望这会帮助你理解这个问题。 – Lazyexpert

+0

在哪里添加并调用此方法? –

0

allImages.push(image); - >这行代码是异步的。它将进入事件队列,并且您的控制台日志将立即调用。因此console.log(allImages);将返回空。

你可以在here了解更多。它将在未来帮助你。