m_vdbeek
m_vdbeek

Reputation: 3774

Async - passing variables and preserving context

If you have the following code :

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

(Different context of a and b for every execution of func.)

Thank you in advance !

Upvotes: 7

Views: 3341

Answers (2)

Frances McMullin
Frances McMullin

Reputation: 5706

possible alternative using 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);

Make sure to check if the environments where you use this support bind. Also, I am binding the "this" value to asyncConfig, this may not be appropriate for you.

edit : Reading over the question again, are a and b primitives or objects/arrays? If they aren't primitives, then you'll want to clone them.

Upvotes: 1

neo
neo

Reputation: 801

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

Upvotes: 9

Related Questions