在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.all
或async.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);
将返回空。
你可以在这里阅读更多。 它将在未来帮助你。
- 如果数组包含id mongoose,则获取数组
- 我该如何提高MongoDB的批量性能?
- 下载并修剪aerospike udf列表
- 将自定义types的数组传递给来自node-pg和SQL注入的postgres函数
- 在使用自定义键推入一些值之后,Javascript数组似乎是空的
- 两个数组的对象将成为具有相同长度的新数组,但来自原始数组的所有数据
- Array.prototype.each = function(callback){for(var i = 0; i <this.length; i ++)callback(this ); } – 这个可以吗?
- NodeJS:如何从数组中删除重复
- Mongoose传递嵌套的sorting对象进行查询