在nodejs中添加mongoose对象到数组

我有一个这样的图像arrays。

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

我使用mongo数据库和在nodejs中,我使用mongoose,一切都很好,我可以将数据添加到mongoose表,但添加每个图像后,我试图将结果对象保存到一个数组,在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 }); 

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

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

简单而快速的修复:

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

我将添加正确的方法与asynchronous/等待,旧版本将使用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); } } } 

allImages.push(image); – >这行代码是asynchronous的。 它将进入事件队列,您的控制台日志将立即调用。

所以console.log(allImages); 将返回空。

你可以在这里阅读更多。 它将在未来帮助你。