@@ -80,16 +80,28 @@ function mapListener(listener) {
8080}
8181
8282/**
83- * Apply an event + optional details to a listener
83+ * Apply an event + optional details to all listener
8484 *
85- * @param {Function } callback
85+ * @param {Listener[] } listener
8686 * @param {Event } event
8787 * @param {Object[]= } details
8888 *
8989 * @ignore
9090 */
91- function applyEvent ( callback , event , details ) {
92- callback . call ( this , event , ...details ) ;
91+ async function applyEvent ( listener , event , details ) {
92+ let i = 0 , item ;
93+
94+ for ( ; ( item = listener [ i ] ) ; i ++ ) {
95+ if ( item . remaining && ! ( item . remaining -= 1 ) ) {
96+ this . off ( item . identifier , item . callback ) ;
97+ }
98+
99+ await Promise . resolve ( item . callback . call ( this , event , ...details ) ) ;
100+
101+ if ( event . isCanceled ) {
102+ break ;
103+ }
104+ }
93105}
94106
95107/**
@@ -203,17 +215,7 @@ class Emitter {
203215 let listener = retrieveListener . call ( this , name ) ;
204216
205217 if ( listener . length ) {
206- let event = new Event ( name , this ) ;
207-
208- listener . some ( ( listener ) => {
209- applyEvent . call ( this , listener . callback , event , details ) ;
210-
211- if ( listener . remaining && ! ( listener . remaining -= 1 ) ) {
212- this . off ( listener . identifier , listener . callback ) ;
213- }
214-
215- return event . isCanceled ;
216- } ) ;
218+ applyEvent . call ( this , listener , new Event ( name , this ) , details ) ;
217219 }
218220
219221 return this ;
@@ -394,4 +396,15 @@ class Emitter {
394396 }
395397}
396398
397- module . exports = initialize ( Emitter ) ;
399+ module . exports = initialize ( Emitter ) ;
400+
401+ /*
402+ (new Emitter())
403+ .on([ 'test1', 'test1' ], function(event) {
404+ console.log(event.name);
405+
406+ return new Promise((resolve) => { resolve(); });
407+ })
408+ .emit('test1')
409+ .emit('test1');
410+ */
0 commit comments