Skip to content

Instantly share code, notes, and snippets.

@jquense
Created February 13, 2014 19:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jquense/8981812 to your computer and use it in GitHub Desktop.
Save jquense/8981812 to your computer and use it in GitHub Desktop.
cast emitter as promise
Promise.castEmitter = function (item, resolveEvents, rejectEvents) {
var methods = {
on: _.has(item, 'on') ? 'on' : 'bind',
off: _.has(item, 'off') ? 'off' : _.has(item, 'removeListener') ? 'removeListener' : 'unbind'
};
function unbindAll(events, fn) {
for (var i = 0; i < events.length; i++)
item[methods.off](events[i], fn);
}
resolveEvents = resolveEvents.trim().split(' ');
rejectEvents = rejectEvents.trim().split(' ');
return new Promise(function (resolve, reject) {
_.each(resolveEvents, function (evt) { item[methods.on](evt, resolveHandler); });
_.each(rejectEvents, function (evt) { item[methods.on](evt, rejectHandler); });
function resolveHandler() {
resolve(_.toArray(arguments));
unbindAll(rejectEvents, rejectHandler);
}
function rejectHandler() {
reject(_.toArray(arguments));
unbindAll(resolveEvents, resolveHandler);
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment