1
什麼是的最佳方式確保在此代碼段更新的MongoDB數據庫前的for循環完成其處理:如何使用MongoDB和node.js處理異步?
var userIdArray = [] // contains 100000 userIds
User.find({'_id': {$in: userIdArray}}, 'name', function(err, result){
var thisTime = new Date().getTime();
var usersArray = [];
for (var i = 0; i < result.length; i++) {
var user = result[i];
var userObject = {
userId: user['_id'],
userName: user.name,
time: thisTime
}
usersArray.push(userObject);
};
Model.update(id,
{$pullAll: {userIds: userIdArray}, $push: {users: {$each: usersArray}}},
function(err, result) {
//continue to do stuff
}
);
});
執行異步操作('Model.update')**之後** for循環,總是。因爲'for'循環內沒有任何異步。見:http://stackoverflow.com/questions/16336367/what-is-the-difference-between-synchronous-and-asynchronous-programming-in-node – TheBronx
@TheBronx謝謝你!因此,如果在for循環中有另一個MongoDB數據庫調用,是否會改變這種情況? – AmpT
當然'Model.update'將在循環中的**同步操作**之後執行,但並不總是在內部添加的異步任務之後執行。一旦你的同步代碼被執行,Node.js將「檢查」已完成的異步任務(也就是說,一旦'Model.update'任務被**排隊**)並執行它的回調函數。您可以在Node.js中閱讀關於** Event Loop **的更多信息:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ – TheBronx