esync

Dirt simple solution to async event listeners

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.