1

I'm working in Node.js (Express) and MongoDB (mongooseJS). I want to create async functions (one after another, quering DB in proper order);

the question is: how can I create variable number of async.series functions, like this:

var supply = [0];
async.series([
      function(callback) {
        Model.find({ color: user.color[supply] }).exec(callback);
      },
  ],function(err, results){
    res.send('Chosen colors: ' + results);
});

and if - lets say - variable supply = [0, 1, 2],

then callback function will be tripled with 0, 1 and 2 placed there:

var supply = [0, 1, 2];
async.series([
      function(callback) {
        Model.find({ color: user.color[supply] }).exec(callback); // supply = 0
      },
      function(callback) {
        Model.find({ color: user.color[supply] }).exec(callback); // supply = 1
      },
      function(callback) {
        Model.find({ color: user.color[supply] }).exec(callback); // supply = 2
      },
  ],function(err, results){
    res.send('Chosen colors: ' + results);
});

in other words, how can i loop this fragment

      function(callback) {
        Model.find({ color: user.color[supply] }).exec(callback);
      },

so number of functions will be here depending on some variable?

Cheers!

Mike

1 Answer 1

3

You could just use async.mapSeries() since it is designed to iterate over an array. Example:

var supply = [0];
async.mapSeries(supply, function(val, callback) {
  Model.find({ color: user.color[val] }).exec(callback);
}, function(err, results) {
  if (err) throw err;
  // all done!
  console.dir(results);
});

This assumes that .exec() calls the callback such that the error is first and the value is second.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.