异步传递变量并保留上下文

Async - passing variables and preserving context

本文关键字:保留 上下文 变量 异步      更新时间:2023-09-26

如果您有以下代码:

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);
  • 如何将变量ab的值传递给func,以便在for循环后执行async.auto(asyncConfig)时,保留ab的上下文?

(每次执行funcab的上下文不同)

提前感谢!

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

使用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,这可能不适合您。

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