ESync is a dirt simple module for waiting on a bunch of async tasks.
var esync = require('esync');
var wait = esync();
wait(function(cb) {
cb();
});
wait(function(cb) {
setTimeout(cb, 1000);
});
wait(function(cb) {
var err = new Error("Oops!");
cb(err);
});
wait.end(function(err) {
/* ... */
});
Its main purpose is as a utility for EventEmitters that need to offer listeners a way to delay execution.
var esync = require('esync');
var EventEmitter = require('events');
var emitter = new EventEmitter();
emitter.on('foo', function(arg1, arg2, wait) { wait(function(cb) {
setTimeout(cb, 1000);
}); });
var wait = esync();
emitter.emit('foo', 3, 5, wait);
wait.end(function(err) {
/* ... */
});
The beaty of this is that it's optional; listeners can simply ignore the parameter. Additionally, it follows the ‘error first’ callback parameter convention seen in Node.js.