@@ -472,6 +472,49 @@ function createIterResult(value, done) {
472
472
return { value : value , done : done } ;
473
473
}
474
474
475
+ function addErrorHandlerIfEventEmitter ( emitter , handler , flags ) {
476
+ if ( typeof emitter . on === 'function' ) {
477
+ eventTargetAgnosticAddListener ( emitter , 'error' , handler , flags ) ;
478
+ }
479
+ }
480
+
481
+ function eventTargetAgnosticRemoveListener ( emitter , name , listener , flags ) {
482
+ if ( typeof emitter . removeListener === 'function' ) {
483
+ emitter . removeListener ( name , listener ) ;
484
+ } else if ( typeof emitter . removeEventListener === 'function' ) {
485
+ emitter . removeEventListener ( name , listener , flags ) ;
486
+ } else {
487
+ throw new TypeError ( 'The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter ) ;
488
+ }
489
+ }
490
+
491
+ function eventTargetAgnosticAddListener ( emitter , name , listener , flags ) {
492
+ if ( typeof emitter . on === 'function' ) {
493
+ if ( flags && flags . once ) {
494
+ emitter . once ( name , listener ) ;
495
+ } else {
496
+ emitter . on ( name , listener ) ;
497
+ }
498
+ } else if ( typeof emitter . addEventListener === 'function' ) {
499
+ // EventTarget does not have `error` event semantics like Node
500
+ // EventEmitters, we do not listen for `error` events here.
501
+ // TODO this wrapListener should not happen here: it means users cannot do
502
+ // `emitter.removeEventListener(listener)`.
503
+ // Might be impossible to work around; if so we will have to rely on builtin
504
+ // `{ once: true }` support after all
505
+ emitter . addEventListener ( name , function wrapListener ( arg ) {
506
+ // IE does not have builtin `{ once: true }` support so we
507
+ // have to do it manually.
508
+ if ( flags && flags . once ) {
509
+ emitter . removeEventListener ( name , wrapListener ) ;
510
+ }
511
+ listener ( arg ) ;
512
+ } ) ;
513
+ } else {
514
+ throw new TypeError ( 'The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter ) ;
515
+ }
516
+ }
517
+
475
518
var AsyncIteratorPrototype = undefined ;
476
519
477
520
function on ( emitter , event ) {
@@ -519,8 +562,8 @@ function on(emitter, event) {
519
562
} ) ;
520
563
} ,
521
564
'return' : function _return ( ) {
522
- emitter . removeListener ( event , eventHandler ) ;
523
- emitter . removeListener ( 'error' , errorHandler ) ;
565
+ eventTargetAgnosticRemoveListener ( emitter , event , eventHandler ) ;
566
+ eventTargetAgnosticRemoveListener ( emitter , 'error' , errorHandler ) ;
524
567
finished = true ;
525
568
526
569
for ( var i = 0 , l = unconsumedPromises . length ; i < l ; i ++ ) {
@@ -533,17 +576,17 @@ function on(emitter, event) {
533
576
throw new TypeError ( 'The "EventEmitter.AsyncIterator" property must be an instance of Error. Received ' + typeof err ) ;
534
577
}
535
578
error = err ;
536
- emitter . removeListener ( event , eventHandler ) ;
537
- emitter . removeListener ( 'error' , errorHandler ) ;
579
+ eventTargetAgnosticRemoveListener ( emitter , event , eventHandler ) ;
580
+ eventTargetAgnosticRemoveListener ( emitter , 'error' , errorHandler ) ;
538
581
}
539
582
} ;
540
583
541
584
iterator [ Symbol . asyncIterator ] = function ( ) { return this ; } ;
542
585
543
586
Object . setPrototypeOf ( iterator , AsyncIteratorPrototype ) ;
544
587
545
- emitter . on ( event , eventHandler ) ;
546
- emitter . on ( 'error' , errorHandler ) ;
588
+ eventTargetAgnosticAddListener ( emitter , event , eventHandler ) ;
589
+ eventTargetAgnosticAddListener ( emitter , 'error' , errorHandler ) ;
547
590
548
591
return iterator ;
549
592
@@ -570,32 +613,3 @@ function on(emitter, event) {
570
613
iterator . return ( ) ;
571
614
}
572
615
}
573
-
574
- function addErrorHandlerIfEventEmitter ( emitter , handler , flags ) {
575
- if ( typeof emitter . on === 'function' ) {
576
- eventTargetAgnosticAddListener ( emitter , 'error' , handler , flags ) ;
577
- }
578
- }
579
-
580
- function eventTargetAgnosticAddListener ( emitter , name , listener , flags ) {
581
- if ( typeof emitter . on === 'function' ) {
582
- if ( flags . once ) {
583
- emitter . once ( name , listener ) ;
584
- } else {
585
- emitter . on ( name , listener ) ;
586
- }
587
- } else if ( typeof emitter . addEventListener === 'function' ) {
588
- // EventTarget does not have `error` event semantics like Node
589
- // EventEmitters, we do not listen for `error` events here.
590
- emitter . addEventListener ( name , function wrapListener ( arg ) {
591
- // IE does not have builtin `{ once: true }` support so we
592
- // have to do it manually.
593
- if ( flags . once ) {
594
- emitter . removeEventListener ( name , wrapListener ) ;
595
- }
596
- listener ( arg ) ;
597
- } ) ;
598
- } else {
599
- throw new TypeError ( 'The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter ) ;
600
- }
601
- }
0 commit comments