循环在node.js中不起作用

时间:2013-12-04 09:40:18

标签: node.js mongodb for-loop express

这是我的代码:

for (var j in albums){
    var album_images   = albums[j].images
    var l = album_images.length
    for ( var i = 0; i < l; i++ ) {
        var image  = album_images[i]
        Like.findOne({imageID : image._id, userIDs:user._id}, function(err,like){
            if(like){
                console.log(i)
                //console.log(albums[j].images[i])
                //albums[j].images[0].userLike = true;
            }
        })
     }
}

这里我有专辑,我正在填充专辑的图像 所以album变量包含所有专辑,在其中,他们的图像也将存在于数组中

我想在每张图片中添加一个额外的字段(userLike)。

这里的问题始终是i的值是3(即专辑中的图像数量(album_images.length) - 暂时我只有一张专辑)

我认为问题可能是因为Like.findOne仅在所有循环都已完成执行时调用(只是猜测)。

如何使其工作以便我将console.log(i)中的所有循环值?

提前致谢

2 个答案:

答案 0 :(得分:2)

我更喜欢使用forEach

albums.forEach(function(album, j) {
  var album_images = album.images;
  album_images.forEach(function(image, i) {
    Like.findOne(...);
  });
});

只是提示:您可以考虑使用$in而不是为每张图片执行findOne

答案 1 :(得分:0)

或者,您可以定义一个函数,以便具有变量不会更改的范围。

...
handle_album_image = function(image, i, j) {
    Like.findOne({imageID : image._id, userIDs:user._id}, function(err, like){
        if(like){
            console.log(i)
            //console.log(albums[j].images[i])
            //albums[j].images[0].userLike = true;
        }
    })
}

for ( var i = 0; i < l; i++ ) {
    var image  = album_images[i]
    handle_album_image(image, i, j)
 }