javascript - 从第三个函数的异步第一个函数获取结果的更好方法是什么?

标签 javascript node.js asynchronous

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

最佳答案

您可以使用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 = {
    microSite, 
    videoAccount, 
    thirdFunction
}

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

1.x 是函数(cb,结果)

2.x 是函数(结果,cb)

就我个人而言,我在任何地方都使用自动来代替并行、 waterfall 和串行。如果您的代码根据当前需求发生变化,将来可以更轻松地进行重构。

关于javascript - 从第三个函数的异步第一个函数获取结果的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260428/

相关文章:

javascript - 使用 dc.js 的日期堆积面积图

javascript - 在 JS 中解析 JSON 字符串中的特殊字符

javascript - 类型错误 : Cannot read property 'length' of undefined in Commerce JS when accessing cart

javascript - 解析 CSV 而不下载/保存

node.js - 我可以在 Node 中执行字符串命令吗?

jquery - 如何使用 cherrypy 进行异步 ajax 调用?

c# - IAsyncResult.AsyncWaitHandle 的使用

php - JSON - 使用 JS 搜索 Json 中字符串的值

javascript - 向人员列表发送私有(private)消息

node.js - 如何让 heroku 与 sequelize.js + postgres 兼容?