【问题标题】: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]);
除了简单地以一系列方式运行多个异步函数之外,它还具有简化并行运行异步操作、使用异步函数映射数组以及各种其他有用的组合器的功能。
【解决方案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 包看起来不错,但就我个人而言,我喜欢看到流程。始终取决于程序员的喜好。