@@ -1009,10 +1009,8 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
10091009 * @returns {AsyncIterator }
10101010 */
10111011function on ( emitter , event , options ) {
1012- const queue = new FixedQueue ( ) ;
1012+ let queue = new FixedQueue ( ) ;
10131013 let resume = null ;
1014- let error = null ;
1015- let errored = false
10161014
10171015 const signal = options ?. signal ;
10181016 validateAbortSignal ( signal , 'options.signal' ) ;
@@ -1033,48 +1031,42 @@ function on(emitter, event, options) {
10331031 { once : true } ) ;
10341032 }
10351033
1036- function errorHandler ( err ) {
1037- error = err ;
1038- errored = true ;
1039-
1034+ function push ( val ) {
10401035 if ( resume ) {
1041- resume ( Promise . reject ( err ) ) ;
1036+ resume ( val ) ;
10421037 resume = null ;
1038+ } else {
1039+ queue . push ( val ) ;
10431040 }
10441041 }
10451042
1046- function abortListener ( ) {
1047- errorHandler ( new AbortError ( undefined , { cause : signal ?. reason } ) ) ;
1043+ function errorHandler ( err ) {
1044+ if ( queue ) {
1045+ push ( Promise . reject ( err ) ) ;
1046+ }
10481047 }
10491048
10501049 function eventHandler ( ...args ) {
1051- if ( resume ) {
1052- resume ( args ) ;
1053- resume = null ;
1054- } else {
1055- queue . push ( args ) ;
1056- }
1050+ push ( args ) ;
1051+ }
1052+
1053+ function abortListener ( ) {
1054+ errorHandler ( new AbortError ( undefined , { cause : signal ?. reason } ) ) ;
10571055 }
10581056
10591057 return async function * ( ) {
10601058 try {
10611059 while ( true ) {
10621060 while ( ! queue . isEmpty ( ) ) {
1063- if ( errored ) {
1064- throw error ;
1065- }
1066- yield queue . shift ( ) ;
1067- }
1068-
1069- if ( errored ) {
1070- throw error ;
1061+ yield await queue . shift ( ) ;
10711062 }
10721063
10731064 yield await new Promise ( resolve => {
10741065 resume = resolve ;
10751066 } ) ;
10761067 }
10771068 } finally {
1069+ queue = null ;
10781070 eventTargetAgnosticRemoveListener ( emitter , event , eventHandler ) ;
10791071 eventTargetAgnosticRemoveListener ( emitter , 'error' , errorHandler ) ;
10801072 }
0 commit comments