【问题标题】:Array of Callback Functions回调函数数组
【发布时间】:2014-01-14 15:33:03
【问题描述】:

我在做什么:

function1(function(){
    function2(function(){
        function3(function(){
            function4();
        }
    }
}

有没有更简单的方法?

miracleFunction([function1,function2,function3,function4]);

miracleFunction = function(array){
    ???
}

【问题讨论】:

标签: javascript node.js asynchronous callback


【解决方案1】:

npm 上使用the async package,您可以使用这样的数组,例如:

var async = require('async');
async.series([function1, function2, function3, function4]);

除了简单地以一系列方式运行多个异步函数之外,它还具有简化并行运行异步操作、使用异步函数映射数组以及各种其他有用的组合器的功能。

【讨论】:

    【解决方案2】:

    看看 Promise,它也可以让你很好地处理错误。

    Q 特别好,只支持您的用例。直接链接:https://github.com/kriskowal/q#sequences

    【讨论】:

      【解决方案3】:

      与其深入回调,不如将它们分解为易于理解的函数:

      function GetUserData(id, callback) {
          // db queries, etc
          connection.query('...get user info...', function (err, results) {
              connection.query('...get user related whatnot...', function (err, results) {
                  callback ();
              });
          });
      }
      
      connection.query('...load page data...', function (err, results) {
          GetUserData( function () {
              res.render('page.ejs', ... );
          });
      });
      

      您甚至可以将更多使用的函数拆分为一个模块,这样您的代码就不会太杂乱。 async 包看起来不错,但就我个人而言,我喜欢看到流程。始终取决于程序员的喜好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-19
        • 1970-01-01
        • 2018-10-20
        • 1970-01-01
        相关资源
        最近更新 更多