6

如果您有以下代码:

var asyncConfig = {};
var a, b;
for(var i = 0; i < someValue; i++) {
    // do something with a
    // do something with b
    asyncConfig[i] = function(callback) {
        func(a, b, callback); // func is async
    }
}
// Include some more parallel or series functions to asyncConfig
async.auto(asyncConfig);
  • 如何传递变量的值abto func以便在循环async.auto(asyncConfig)之后执行时,保留and的上下文?forab

(每次执行的a不同上下文。)bfunc

先感谢您 !

4

2 回答 2

8
var asyncConfig = {};
var a, b;
for(var i = 0; i < someValue; i++) {
    // do something with a
    // do something with b
    (function(a,b){
      asyncConfig[i] = function(callback) {
        func(a, b, callback); // func is async
      }
    })(a,b);
}
// Include some more parallel or series functions to asyncConfig
async.auto(asyncConfig);
于 2013-04-29T12:50:03.383 回答
1

使用bind的可能替代方法:

var asyncConfig = {};
var a, b;
for(var i = 0; i < someValue; i++) {
    // do something with a
    // do something with b
    asyncConfig[i] = func.bind(asyncConfig, a, b);
}
// Include some more parallel or series functions to asyncConfig
async.auto(asyncConfig);

确保检查您使用此支持的环境是否绑定。此外,我将“this”值绑定到asyncConfig,这可能不适合您。

编辑:再次阅读问题,是 a 和 b 原语还是对象/数组?如果它们不是原语,那么您将需要克隆它们。

于 2013-04-29T12:55:05.687 回答