In the next example I don't have access to variable "locals" inside the functions "fetcher", "parser" and "saveToDb".
var parser = require('parser.js');
var fetcher = require('fetcher.js');
var saveToDb = require('models/model.js');
var async = require('async');
function task() {
var locals = [] //<-- declared here
async.series([
fetcher, //<-- can not access "locals"
parser, //<-- can not access "locals"
saveToDb //<-- can not access "locals"
],
function (err) {
if (err) return callback(err);
callback(null);
});
}
In the next example "local"s is accessible. I just copyed the functions declarations from the requested modules, and pasted them straight inside "async.series".
var async = require('async');
function task() {
var locals = [] //<-- declared here
async.series([
function(callback) {// <-- can access "locals"},
function(callback) {// <-- can access "locals"},
function(callback) {// <-- can access "locals"}
],
function (err) {
if (err) return callback(err);
callback(null);
});
}
While this works - I do want to keep my code modular. How can I fix that ? Or - what I forgot here about the fundamentals of JavaScript ?
Thanks.
IF i understand your problem correctly this is a javascript 101 question.
fetcher can be a factory that creates a concrete fetcher.
then in your script
i believe it is a kind of currying.
You can have the 3 mentionned functions defined like this :
and rewrite your code as:
In the first example, the callbacks live in another scope so can't access
locals
.You could create partial functions that get the
locals
variable passed as first argument, but that would require you to rewrite your callbacks.