【发布时间】:2014-10-06 11:52:30
【问题描述】:
每个人。
我对“回调函数 - 变量范围”有疑问,
我想使用'i in for loop'到'回调函数User_UidSearch',
但我不能使用它。
(我希望解决方案不要使用全局变量。)
Task_TidSearchExecution = function(tid, callback) {
var sql = "SELECT * FROM execution WHERE task = '" + tid + "'";
dbclient.query(sql, function (err, results) {
if (err || results.length <= 0)
callback(false);
else {
console.log(results.length);
for (var i = 0 ; i < results.length ; i++) {
User_UidSearch(results[i].employee, function (user) {
console.log(i);
// results[i]['email'] = user.email;
});
}
callback(results);
}
});
}
“console.log(i);”
重新检查,这是错误的。 -> 输出是“未定义的”。
未定义是“console.log(result[i]);”
但如果 results.length 为 2,“i”将保持 '2' 控制台两次。
我知道因为 for 循环结束然后执行 User_UidSearch,
但我如何才能解决它“i”是 0 和 1。
【问题讨论】:
-
不,不是。它在外部
function本地范围内定义。但它用于闭包,需要特殊的逻辑才能工作。 @Salmon - 你确定console.log(i)写的是undefined而不是results.length的值吗? -
@BOSS 我很想看到一个小提琴来证明这一点。
-
"输出都是 'undefined' of all" 并不真正适合所提供的 sn-p。
i至少应该是一个数字,只是可能不是预期的特定值。如果每条日志都显示results.length的值,那么请看:JavaScript closure inside loops – simple practical example。 -
将 user_UidSearch 调用封装在一个闭包中,传入 i 和 results
-
@IlyaLuzyanin: rigt.my bad I didn't see through clear.removed my comment
标签: javascript node.js callback scope