显然,解决方案会因应用程序而异,但我发现以这样一种方式构建我的应用程序很有帮助,即顶层异步函数的回调一直被跟踪到最后。完成所有顶级回调后,您可以触发一些事件或调用一些回调来指示一切都结束了。使用类似async 的parallel东西,你可能会做这样的事情:
eventEmitter.on('someEvent', function(some, data, callback) {
async.parallel([
function(cb) { firstAsyncThing(some, cb); },
function(cb) { secondAsyncThing(data, cb); }
], function(err, results) {
// called when all functions passed in the array have their `cb` called
callback(err, results);
});
});
因此,您可以将回调传递给您的事件:
eventEmitter.emit('someEvent', 'some', 'data', function(error, results) {
// the event has been fully handled
});