diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index 4eee7076295..88305407e2b 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -830,13 +830,14 @@ describe('Client', () => { quitPromise = client.quit(); assert.equal(client.isOpen, false); - const [ping] = await Promise.all([ + const [ping, quit] = await Promise.all([ pingPromise, - assert.doesNotReject(quitPromise), + quitPromise, assert.rejects(client.ping(), ClientClosedError) ]); assert.equal(ping, 'PONG'); + assert.equal(quit, 'OK'); }, { ...GLOBAL.SERVERS.OPEN, disableClientSetup: true diff --git a/packages/client/lib/client/index.ts b/packages/client/lib/client/index.ts index e1ddb64b9a7..a85a5669dc8 100644 --- a/packages/client/lib/client/index.ts +++ b/packages/client/lib/client/index.ts @@ -585,16 +585,17 @@ export default class RedisClient< pUnsubscribe = this.PUNSUBSCRIBE; - QUIT(): Promise { - return this.#socket.quit(() => { - const quitPromise = this.#queue.addCommand(['QUIT'], { + QUIT(): Promise { + return this.#socket.quit(async () => { + const quitPromise = this.#queue.addCommand(['QUIT'], { ignorePubSubMode: true }); this.#tick(); - return Promise.all([ + const [reply] = await Promise.all([ quitPromise, this.#destroyIsolationPool() ]); + return reply; }); } diff --git a/packages/client/lib/client/socket.ts b/packages/client/lib/client/socket.ts index cc9d04c7b2f..345ac1d3e38 100644 --- a/packages/client/lib/client/socket.ts +++ b/packages/client/lib/client/socket.ts @@ -240,14 +240,15 @@ export default class RedisSocket extends EventEmitter { this.emit('end'); } - async quit(fn: () => Promise): Promise { + async quit(fn: () => Promise): Promise { if (!this.#isOpen) { throw new ClientClosedError(); } this.#isOpen = false; - await fn(); + const reply = await fn(); this.#disconnect(); + return reply; } #isCorked = false;