From 6c17168b03307f257491dbd6c0962d5bfade02cc Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Mon, 2 May 2022 11:13:16 +0200 Subject: [PATCH] fix: avoid multiple subscriptions with empty promises Fix #1129 --- packages/pinia/__tests__/subscriptions.spec.ts | 4 ++-- packages/pinia/src/store.ts | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/pinia/__tests__/subscriptions.spec.ts b/packages/pinia/__tests__/subscriptions.spec.ts index 4322792c..cfc928d1 100644 --- a/packages/pinia/__tests__/subscriptions.spec.ts +++ b/packages/pinia/__tests__/subscriptions.spec.ts @@ -202,7 +202,7 @@ describe('Subscriptions', () => { expect(spy2).toHaveBeenCalledTimes(1) }) - it.skip('triggers pre subscriptions only once on $patch', async () => { + it('triggers pre subscriptions only once on $patch', async () => { const s1 = useStore() const spy1 = jest.fn() @@ -216,7 +216,7 @@ describe('Subscriptions', () => { // adding an extra await works // await false // adding any other delay also works - await delay(20) + // await delay(20) // await nextTick() expect(spy1).toHaveBeenCalledTimes(1) expect(spy1).not.toHaveBeenCalledWith( diff --git a/packages/pinia/src/store.ts b/packages/pinia/src/store.ts index 3d5f3db9..65bd466a 100644 --- a/packages/pinia/src/store.ts +++ b/packages/pinia/src/store.ts @@ -252,6 +252,9 @@ function createSetupStore< const hotState = ref({} as S) + // avoid triggering too many listeners + // https://github.com/vuejs/pinia/issues/1129 + let activeListener: Symbol | undefined function $patch(stateMutation: (state: UnwrapRef) => void): void function $patch(partialState: _DeepPartial>): void function $patch( @@ -282,8 +285,11 @@ function createSetupStore< events: debuggerEvents as DebuggerEvent[], } } + const myListenerId = (activeListener = Symbol()) nextTick().then(() => { - isListening = true + if (activeListener === myListenerId) { + isListening = true + } }) isSyncListening = true // because we paused the watcher, we need to manually call the subscriptions -- 2.47.2