什么'这是从第三个函数上的async 1st函数获得结果的更好方法

What's a better way to get the result from async 1st function on the 3rd function?

本文关键字:函数 async 1st 方法 更好 结果 三个 什么      更新时间:2023-09-26

虽然我现在可以将函数外的变量设置为microsite,或者将第二个函数的回调更改为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){...});

您可以使用自动功能:

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

其中最终的CCD_ 2是以下形式的对象:

result = {
    microSite, 
    videoAccount, 
    thirdFunction
}

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

1.x是function(cb, results)

2.x是function(results, cb)

就我个人而言,我在任何地方都使用auto来代替并联、瀑布和串联。如果您的代码根据您当前的需求发生变化,那么在将来进行重构会更容易。