有人可以向我解释为什么我无法将booksCount变量保存到用户json对象中吗?这是我的代码
for(var user in users){
Books.count({author: users[user]['id']}).exec(function(err, count){
users[user]['booksCount']=count;
});
}
return res.view('sellers', {data: users});
其中Users是表中用户的列表,这是User.find()方法的直接结果。用户就是模特。
现在,如果我尝试在for循环中打印用户[user] ['booksCount'],它可以正常工作。但当它超出for循环时,变量消失在空气中。控制台打印'undefined'在外面循环。
答案 0 :(得分:1)
因为Books.count是一个API调用,并且所有API调用都是异步的所以在
中for(var user in users){
// It Will call the Books.count and leave the callback Function without waiting for callback response.
Books.count({author: users[user]['id']}).exec(function(err, count){
users[user]['booksCount']=count;
});
}
//As callback result didn't came here but the controll came here
// So, users[user] will be undefined here
return res.view('sellers', {data: users});
使用承诺:
async.forEachOf(users, function (value, user, callback) {
Books.count({author: users[user]['id']}).exec(function(err, count){
users[user]['booksCount']=count;
callback(err);
// callback function execute after getting the API result only
});
}, function (err) {
if (err) return res.serverError(err.message); // Or Error view
// You will find the data into the users[user]
return res.view('sellers', {data: users});
});