diff --git a/src/session-pool.ts b/src/session-pool.ts index c404e18c9..47fb8df9a 100644 --- a/src/session-pool.ts +++ b/src/session-pool.ts @@ -997,13 +997,20 @@ export class SessionPool extends EventEmitter implements SessionPoolInterface { throw new SessionPoolExhaustedError(this._getLeaks()); } + let removeOnceCloseListener: Function; let removeListener: Function; // Wait for the requested type of session to become available. const availableEvent = type + '-available'; const promises = [ - this._onClose.then(() => { - throw new GoogleError(errors.Closed); + new Promise((_, reject) => { + const onceCloseListener = () => reject(new GoogleError(errors.Closed)); + this.once('close', onceCloseListener); + removeOnceCloseListener = this.removeListener.bind( + this, + 'close', + onceCloseListener + ); }), new Promise(resolve => { this.once(availableEvent, resolve); @@ -1077,6 +1084,7 @@ export class SessionPool extends EventEmitter implements SessionPoolInterface { await Promise.race(promises); } finally { this._waiters[type]--; + removeOnceCloseListener!(); removeListener!(); removeErrorListener!(); removeTimeoutListener();