我无法从外部范围将变量捕获到lambda函数中。当我运行此代码时,它使用相同的变量执行。我将变量传递给函数,但我显然误解了范围如何与lambda一起使用。
// Add tasks to async_tasks
for(var i = 0; i < 10; i++){
var task = function(task_callback){
// I want to capture i and pass it to the function
(function(i){
exports.defaultCarWithId(connection, i, function(err, data){
if (err) {
console.log('error in query: ' + err.stack);
fCallback("[Internal Server Error]", null);
return;
}
task_callback();
});
})(i);
};
async_tasks.push(task);
}
// execute tasks
async.parallel(async_tasks, function(err, results){
fCallback(null, user);
return;
});
答案 0 :(得分:1)
你可以包装外部函数:
var task = (function(i){
return function(task_callback){
exports.defaultCarWithId(connection, i, function(err, data){
if (err) {
console.log('error in query: ' + err.stack);
fCallback("[Internal Server Error]", null);
return;
}
task_callback();
});
};
})(i);
async_tasks.push(task);
或传递i
作为参数并绑定它:
var task = function(i, task_callback){
exports.defaultCarWithId(connection, i, function(err, data){
if (err) {
console.log('error in query: ' + err.stack);
fCallback("[Internal Server Error]", null);
return;
}
task_callback();
});
};
async_tasks.push(task.bind(null, i));
答案 1 :(得分:0)
基本上我可以看到两个错误:
创建这样的闭包:
Var task =(function(i){ return函数(task_callback){ //你的逻辑 }; })(ⅰ);
希望它能提供帮助。
答案 2 :(得分:0)
很难理解你究竟在这里调用lambda,但是如果你想在异步中绑定上下文,你需要使用方法中的每一个或一个新的数组方法。 Have a look to docs