JS节点asynchronous处理事件

有人可以指出我或者解释某种基于事件的devise模式来处理等待两个事件完成的行为。
我有一个模板,加载asynchronous和数据库调用,也是在同一时间发生。 我有一个只有在这两个任务都完成时才需要执行的响应。
我能想出的唯一解决scheme就是做一些丑陋的事情,比如在布尔事件中设置为true,然后检查它们是否全部为真。 有一个更好的方法吗?

有没有简单的方法来做到这一点,但有很多stream控制库来处理这种事情。 最简单的方法可能是保持一个全局计数器,当你开始一个asynchronous调用时递增,然后在callback完成时递减。 每个操作可以检查计数器何时结束,如果为零则触发依赖于两者的响应正在完成。

只需要添加一个来自Chris的答案的例子:

使用asynchronous, https://github.com/caolan/async

async.parallel([ function(callback){ // query a database, lets say mongodb/mongoose User.findOne({email: email}, function(err, user){ callback(err, user); }); }, function(callback){ // Load a template from disk fs.readFile('views/user.html', function (err, data) { callback(err, data) }); } ], function(err, results){ // Should have [user, template data] }); 

或者与柜台:

 var user = false, template = false, count = 2; function build_user_view(){ // user, template should be available } User.findOne({email: email}, function(err, userDoc){ user = userDoc; --count || build_user_view(); }); fs.readFile('views/user.html', function (err, data) { template = data; --count || build_user_view(); });