async.series:可变数量的回调

时间:2014-09-17 13:09:16

标签: javascript node.js mongodb asynchronous express

我在Node.js(Express)和MongoDB(mongooseJS)工作。我想创建异步函数(一个接一个,按正确的顺序查询DB);

问题是:如何创建可变数量的async.series函数,如下所示:

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

如果 - 让我们说 - 变量供应= [0,1,2],

然后回调函数将增加三倍,其中0,1和2放在那里:

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

换句话说,我怎么能循环这个片段

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

因此,根据某些变量,函数的数量会在这里吗?

干杯!

麦克

1 个答案:

答案 0 :(得分:3)

您可以使用async.mapSeries(),因为它旨在迭代数组。例如:

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

这假设.exec()调用回调,使得错误是第一个,值是第二个。