这是我的代码:
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)
中的所有循环值?
提前致谢
答案 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)
}