gpt4 book ai didi

node.js - JS Lambda 范围与 async.parallel 调用

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:45 24 4
gpt4 key购买 nike

我无法将变量从其外部作用域捕获到 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;

});

最佳答案

您可以包装外部函数:

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作为参数并绑定(bind)它:

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

关于node.js - JS Lambda 范围与 async.parallel 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39578432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com