【问题标题】:What's a better way to get the result from async 1st function on the 3rd function? [closed]从第三个函数的异步第一个函数中获取结果的更好方法是什么? [关闭]
【发布时间】:2016-09-12 15:03:11
【问题描述】:

虽然我现在可以在 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){...});

【问题讨论】:

标签: javascript node.js asynchronous


【解决方案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)

就个人而言,我在所有地方都使用 auto 来代替并行、瀑布和系列。如果您的代码根据您当前的需求发生变化,它可以让您在未来更轻松地进行重构。

【讨论】:

  • 自动方法很棒。谢谢!
猜你喜欢
  • 2018-09-14
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
相关资源
最近更新 更多