2017-02-14 59 views
2

有人可以向我解釋爲什麼我不能將booksCount變量保存到用戶json對象嗎?這裏是我的代碼風帆js-模型結果集變量範圍

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}); 

,用戶是從一個一個User.find()方法的直接結果表的用戶列表。用戶是模型。

現在,如果我嘗試在for循環內打印用戶[user] ['booksCount'],它工作正常。但是當它超出for循環時,變量消失在空氣中。控制檯在for循環外打印'undefined'。

+2

因爲你這樣做異步。爲什麼不在收取所有用戶時填充用戶的書籍? – orhankutlu

+0

這就是我所做的,1)從書籍中獲取所有作者列表2)填充用戶數組3)查找每個人的書籍數量。沒有作者表。用戶也可以是作者。這就是我這樣做的原因。 – Carmen

+0

謝謝,讓我看看我能在這裏做什麼 – Carmen

回答

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}); 
}); 
+0

這樣做,謝謝 – Carmen