A prioritized, promising EventEmitter
A promising, prioritized event emitter. Attempts to follow Node's EventEmitter API as much as possible.
Because I've wanted a prioritized event emitter on multiple occasions. In order to ensure priority, you need to know when previous priority levels finish executing. Promises provide a clean and powerful way to extend the EventEmitter for listeners that need to do asynchronous activities to finish.
Now that we're going from finishing a priority level to the next level, we have some interesting cases.
Priority is by default set to zero. Larger integers indicate higher priority, and priority may be both positive and negative.
The promising_listener is a function to be executed when an event is emitted. This function may return an A+ promise.
Listeners with the same priority are executed in parallel, but listeners of differing priority are executed from highest to lowest priority in series.
emitteron'submit' -100console.log'executing low-priority handler'emitteron'submit'console.log'executing normal-priority handler 1'return Qdelay500thenconsole.log'done executing normal-priority handler 1'emitteron'submit' 100console.log'executing high-priority handler'return Qdelay500thenconsole.log'done executing high-priority handler'emitteron'submit'console.log'executing normal-priority handler 2'console.log'emitting submit event'emitteremit'submit' value: 'value'thenconsole.log'done handling submit event'console.error'something went wrong' reason
The output of the above example would be:
// emitting submit event// executing high-priority handler// done executing high-priority handler// executing normal-priority handler 1// executing normal-priority handler 2// done executing normal-priority handler 1// executing low-priority handler// done handling submit event