diff --git a/packages/client/lib/client/commands-queue.ts b/packages/client/lib/client/commands-queue.ts index df2c25dbc2c..8af200314b8 100644 --- a/packages/client/lib/client/commands-queue.ts +++ b/packages/client/lib/client/commands-queue.ts @@ -369,7 +369,8 @@ export default class RedisCommandsQueue { #setReturnBuffers() { this.#parser.setReturnBuffers( !!this.#waitingForReply.head?.value.returnBuffers || - !!this.#pubSubState?.subscribed + !!this.#pubSubState?.subscribed || + !!this.#pubSubState?.subscribing ); } diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index 1d627756c6d..d52086da412 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -683,6 +683,21 @@ describe('Client', () => { } }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should not fail when message arrives right after subscribe', async publisher => { + const subscriber = publisher.duplicate(); + + await subscriber.connect(); + + try { + await assert.doesNotReject(Promise.all([ + subscriber.subscribe('channel', () => {}), + publisher.publish('channel', 'message') + ])); + } finally { + await subscriber.disconnect(); + } + }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should be able to quit in PubSub mode', async client => { await client.subscribe('channel', () => { // noop