Created
December 3, 2013 00:46
-
-
Save supershabam/7761955 to your computer and use it in GitHub Desktop.
WorkEmitter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// problem: you need to emit an event and then do something AFTER the handlers have completed | |
// EventEmitter works ONLY if your event handlers are not async. If you're working in the browser and you | |
// emit an event and then change page, or submit a form, you run the risk of your async handlers not completing | |
// before you change pages | |
// WorkEmitter has the same interface as EventEmitter, except it expects that the handlers will return a promise. | |
var Q = require('q') | |
emitter.on('submit', function(form) { | |
var deferred = Q.defer() | |
// some async function | |
form.validate(function(err) { | |
if (err) { | |
return deferred.reject(err) | |
} | |
deferred.resolve() | |
}) | |
return deferred.promise | |
}) | |
emitter.emit('submit', form).then(function() { | |
// something to do after all events on "submit" have completed successfully | |
}).fail(function(err) { | |
// something to do after one or more events on "submit" have errored | |
}).fin(function() { | |
// something to do after all events have been processed | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thinking about adding priorities to this as well.
event handler execution flow: