2017-07-17 43 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瞭解更多。它將在未來幫助你。