Javascript 异步函数调用中作为参数的循环变量

Javascript 异步函数调用中作为参数的循环变量,javascript,asynchronous,foreach,async.js,Javascript,Asynchronous,Foreach,Async.js,我有一个如下形式的对象 sortedFilters: { task:{...}, appointment:{...}, email:{...} } 现在我想使用for in循环,为async.parallel构建任务数组,其中包含要异步执行的函数: var tasks = []; for (var entity in sortedFilters) { tasks.push(function(callback) { var entityResult =

我有一个如下形式的对象

sortedFilters:
  {
    task:{...},
    appointment:{...},
    email:{...}
  }
现在我想使用
for in
循环,为
async.parallel
构建任务数组,其中包含要异步执行的函数:

var tasks = [];
for (var entity in sortedFilters) {
  tasks.push(function(callback) {
    var entityResult = fetchRecordsForEntity(entity, businessUnits, sortedFilters);
    var formattedEntityResults = formatResults(entity, entityResult);  
    callback(null, formattedEntityResults);
  });
}
问题是,在调用函数时,
实体
指向循环的最后一个值(在这种情况下,它将是
电子邮件


如何在将函数添加到数组时确定精确值?

您需要为变量创建一个范围:

var tasks = [];
for (var en in sortedFilters) {
  (function(entity) {
     tasks.push(function(callback) {
        var entityResult = fetchRecordsForEntity(entity, businessUnits, sortedFilters);
        var formattedEntityResults = formatResults(entity, entityResult);  
        callback(null, formattedEntityResults);
     });
  })(en);
}

能否请您详细说明一下您最后讨论的是哪些函数,以及
sortedFilter
在多大程度上可以通过
for…in
循环枚举?特别是我没有得到您的示例和
async.parallel
调用之间的连接。这是在哪里发生的,又是如何发生的?