So i am having a bit of Dilemma, trying to refactor a set of nested anonymous closures in Javascript. However i am unsure the standard way of maintaining reference to parameters that otherwise would be seen by child closures.
for example
var foo;
var obj = new Obj();
obj.foobar(function (p1, p2, p3) {
foo.onEvent(function (s1, s2) {
if (s1 === 'bar') {
s2.status = p2; //p2 has a reference here
}
});
});
However if i refactor this code, so each closure it on its own named function, What would be the ideal way of getting a reference to p2?
example
var onFooEvent = function (s1, s2) {
if (s1 === 'bar') {
s2.status = p2; //p2 will no longer has a reference here
}
};
var onFoobar = function (p1, p2, p3) {
foo.onEvent(onFooEvent);
};
var foo;
var obj = new Obj();
obj.foobar(onFoobar);
MORE ROBUST EXAMPLE
var pooledQuery = function (query, params, env, res) {
return new imports.promise(function(resolve, reject) {
pool.acquire(function (err, client) {
var db;
if (err != null) {
console.log(err)
reject(err);
}
var meta = { env: env, res: res, result: [] };
db = client.query(query, params);
db.on('result', function (res) {
return res.on('row', function (row) {
return meta.result.push(row);
}).on('error', function (err) {
meta.result = err;
reject(meta);
}).on('end', function (info) {
return meta.result;
});
}).on('end', function () {
pool.release(client);
resolve(meta);
});
});
});
};