我有一个具有以下形式的对象。
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
)。
如何在将函数添加到数组时确定精确值?
答案 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);
}