【问题标题】:Loop variable as parameter in asynchronous function call [duplicate]循环变量作为异步函数调用中的参数[重复]
【发布时间】:2013-11-26 23:07:50
【问题描述】:

我有一个如下形式的对象。

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

在将函数添加到数组的那一刻,我如何确定确切的值?

【问题讨论】:

  • 您能否详细说明一下您到底在谈论哪些功能,以及sortedFilters 可以在多大程度上被for…in 循环枚举?特别是我没有得到您的样本和async.parallel 电话之间的联系。这是在哪里以及如何发生的?

标签: javascript asynchronous foreach async.js


【解决方案1】:

您需要为变量创建范围

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

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2019-08-05
    • 2017-12-22
    • 1970-01-01
    • 2011-10-22
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多