From fad23973a5384006587bd9bc46711ff6e5bdd5ab Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Wed, 18 Jan 2023 12:55:11 -0500 Subject: [PATCH] fix #2333 - fix quit reply (#2346) --- packages/client/lib/client/index.spec.ts | 5 +++-- packages/client/lib/client/index.ts | 9 +++++---- packages/client/lib/client/socket.ts | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index 5ad3ace3fe..63200bf82d 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -841,13 +841,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 02baa9c8d0..8c5a23db44 100644 --- a/packages/client/lib/client/index.ts +++ b/packages/client/lib/client/index.ts @@ -586,16 +586,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 cc9d04c7b2..345ac1d3e3 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;