从这个答案https://stackoverflow.com/a/21571589/9036255中汲取灵感,我决定将其复制到自己的代码中。我发现它没有任何回应。
function getCallback(callbackTrash) {
var Books = mongoose.model('Book');
Books.find({'username': name[usernames]}, function (err, result) {
callbackTrash(result);
});
}
getCallback(function(result) {
books.push(result);
});
books
只是一个数组。当我稍后控制台登录时,它返回“ []”
如果我将books.push
更改为console.log
,它将正确记录所有结果。
我的问题是如何将结果推入books数组?
我对异步事物没有经验。没有陡峭的学习曲线的实际答案是什么?
这是我的主要背景:
exports.timeline = function(req, res) {
var Followers = mongoose.model('Follow');
Followers.find({'follower': req.user.username}, function(err, followerResult) {
var name = [req.user.username];
var books = [];
function addName(username) {
name.push(username);
}
for(var user in followerResult) {
addName(followerResult[user]['followed']);
}
for(var usernames in name) {
function getCallback(callbackTrash) {
var Books = mongoose.model('Book');
Books.find({'username': name[usernames]}, function (err, loadOfBollocks) {
callbackTrash(loadOfBollocks);
});
}
getCallback(function(result) {
books.push(result);
});
}
console.log(books);
res.send(books);
});
}
答案 0 :(得分:0)
我认为您的代码是正确的。但是:
编辑
好,我现在知道了。您将控制台放置并重新发送到错误的位置。 这些行在循环(for)过程完成之前执行。这就是为什么您有一个用于“ books”的空数组的原因。 也许只有在完成“名称”数组中的循环时,才需要执行这些代码。这是代码:
public synchronized V put(K key, V value) {
// Make sure the value is not null
if (value == null) {
throw new NullPointerException();
}
...
希望有帮助!