在第3个函数上从async 1st函数获得结果的更好方法是什么?

时间:2016-05-16 18:09:14

标签: javascript node.js asynchronous

虽然我现在可以将funcs之外的变量变成微型网站,或者将第二个函数的回调更改为function(err, result) { cb(cb, result, microsite)}我想知道比上面提到的更好的选项。这是我的代码:

var funcs = [
  function(cb){
    Microsite.findOne({_id: id1}, cb);  
  },
  function(microsite, cb){
    VideoAccount.findOne({_id: id2}, cb);
  },
  function(videoAccount, cb) {
    execute(microsite, videoAccount, cb);
  });

  async.waterfall(funcs, function(err, result){...});

1 个答案:

答案 0 :(得分:1)

您可以使用auto功能:

async.auto({

    microSite: function(cb) {
        Microsite.findOne({_id: id1}, cb);
    },

    videoAccount: function(cb) {
        VideoAccount.findOne({_id: id2}, cb);
    },

    thirdFunction: ["microSite", "videoAccount", function(results, cb) {
        execute(results.microSite, results.videoAccount, cb);
    }]

}, function(error, result) {...});

最终result是表格的对象:

result = {
    microSite, 
    videoAccount, 
    thirdFunction
}

注意:第三个​​功能中的参数取决于您的版本:

1.x是function(cb, results)

2.x是function(results, cb)

就个人而言,我使用汽车无处不在,代替平行,瀑布和系列。如果您的代码改变了您当前的需求,它将在未来更容易重构。