我有一系列图像。
var newImageParams = [
{
image_string: "hello",
_type: "NORMAL"
},
{
image_string: "hello",
_type: "NORMAL"
}
]
我正在使用mongo db和在nodejs中,我使用的是mongoose,一切都很好,我可以将数据添加到mongoose表中,但是在添加每个图像之后,我试图将生成的对象保存到一个数组中,在控制台中.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);
});
}
}
我将使用async / await添加正确的方法,旧版本将使用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);
}
}
}
答案 1 :(得分:0)
allImages.push(image);
- >那行代码是异步的。它将进入事件队列,您的控制台日志将立即调用。
所以console.log(allImages);
将返回空。
您可以在here中阅读更多内容。它将来会帮助你。