【问题标题】:async.series: variable number of callbacksasync.series:可变数量的回调
【发布时间】:2014-11-11 13:04:48
【问题描述】:

我正在使用 Node.js (Express) 和 MongoDB (mongooseJS)。我想创建异步函数(一个接一个,以正确的顺序查询数据库);

问题是:如何创建可变数量的 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);
      },

所以这里的函数数量取决于某些变量?

干杯!

迈克

【问题讨论】:

    标签: javascript node.js mongodb asynchronous express


    【解决方案1】:

    您可以只使用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() 调用回调使得错误在第一,值在第二。

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多