回调函数数组

时间:2013-12-27 02:32:14

标签: javascript node.js asynchronous callback

我正在做什么:

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

有更简单的方法吗?

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

miracleFunction = function(array){
    ???
}

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

不要深入回调,而是将其分解为易于理解的功能:

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

您甚至可以将更多使用过的函数分解为模块,这样您的代码就不会有太多混乱。异步软件包看起来很不错,但就个人而言,我喜欢看流程。始终达到程序员的偏好。