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

时间:2013-11-26 13:34:50

标签: 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 = fetchRecordsForEntity(entity, businessUnits, sortedFilters);
    var formattedEntityResults = formatResults(entity, entityResult);  
    callback(null, formattedEntityResults);
  });
}

问题是,在调用函数时,entity指向循环的最后一个值(在这种情况下,它将是email)。

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

1 个答案:

答案 0 :(得分:0)

您需要为变量创建范围

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