我有以下代码
followDB.find({user: username}, function(err, docs){
if(err){console.log(err)}else {
for (var i = 0; i < docs.length; i++) {
postsDB.find({ user: docs[i].follow }, function (err, docs) {
if(err){console.log(err)}
else{
for (var i = 0; i < docs.length; i++) {
var array = []
var post = {
user: docs[i].user,
text: docs[i].text,
time: docs[i].time,
likes: docs[i].like,
id: docs[i]._id
}
array.push(post)
console.log(array.length);
//socket.emit('Order Posts', user, text, time, likes, id)
}
}
});
}
}
})
由于某种原因,array.length总是等于1,我不知道为什么。数组中的对象始终是最后提交的对象。
感谢您的支持。
答案 0 :(得分:4)
您正在每次迭代时重新创建数组。
在for循环之外,在它之前,而不是在它内部初始化它。
答案 1 :(得分:0)
只需在for循环外更改数组
followDB.find({user: username}, function(err, docs){
if(err){console.log(err)}else {
for (var i = 0; i < docs.length; i++) {
postsDB.find({ user: docs[i].follow }, function (err, docs) {
if(err){console.log(err)}
else{
//simply change the array outside the for loop
var array = []
for (var i = 0; i < docs.length; i++) {
var post = {
user: docs[i].user,
text: docs[i].text,
time: docs[i].time,
likes: docs[i].like,
id: docs[i]._id
}
array.push(post)
console.log(array.length);
//socket.emit('Order Posts', user, text, time, likes, id)
}
}
});
}
}
})