引用另一個回調中相同的對象我想要一個新的屬性添加到一個對象。看來,從這個範圍內正常工作:從的forEach
rows.forEach(function (row, i) {
row.foo = i;
});
如果我做的console.log(行)我可以看到正確的值已添加FOO。如果我在forEach中有另一個回調,我不會再看到更改。爲什麼?
rows.forEach(function (row, i) {
getUserById(row.user_id, function(user) {
row.foo = i;
});
});
是的,回調get被正確激發。這裏是getUserById
function getUserById(userId, callback) {
connection.query('select * from t_user where id = ?', [userId], function(err, results) {
if (err) {
console.log("repo error");
} else {
if (results.length == 0) {
callback(null);
} else {
callback(results[0]);
}
}
});
}
這應該可以,假設'getUserById'調用回調。你能發佈更多的代碼嗎? – robbrit 2013-02-08 21:44:02
什麼是'getUserById'?你正在定義內部函數,但它在這裏的任何地方都沒有被調用,如果這就是你想要做的事情,那麼當邏輯相同時爲什麼你會使用替代函數定義是值得懷疑的。我的猜測是你寫回調,但你實際上從來沒有把它回調。爲什麼內部函數有一個不被使用的參數? – 2013-02-08 21:45:58
也許回調被調用的時間晚於你檢查'row.foo'(比如說,在循環之後的AJAX回調)? – 2013-02-08 21:47:41