From ae1a4ae100e692609c81ebaaacb208aa1b1df7be Mon Sep 17 00:00:00 2001 From: Max Nowack Date: Wed, 3 Apr 2024 21:05:06 +0200 Subject: [PATCH] fix: call save on primary adapter after load on secondary has finished --- .../persistence/combinePersistenceAdapters.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/signaldb/src/persistence/combinePersistenceAdapters.ts b/packages/signaldb/src/persistence/combinePersistenceAdapters.ts index 867532f8..41b0a6f2 100644 --- a/packages/signaldb/src/persistence/combinePersistenceAdapters.ts +++ b/packages/signaldb/src/persistence/combinePersistenceAdapters.ts @@ -5,12 +5,13 @@ export function createTemporaryFallbackExecutor, ReturnV firstResolvingPromiseFn: (...args: Args) => Promise, secondResolvingPromiseFn: (...args: Args) => Promise, options?: { - onResolve?: () => void, + onResolve?: (returnValue: ReturnVal) => void, cacheTimeout?: number, }, ): (...args: Args) => Promise { const cacheTimeout = options?.cacheTimeout ?? 0 let isResolved = false + let resolvedValue: ReturnVal | null = null let timeout: NodeJS.Timeout | null = null let secondaryPromise: Promise | null = null return (...args: Args) => { @@ -23,11 +24,13 @@ export function createTemporaryFallbackExecutor, ReturnV if (cacheTimeout > 0) { timeout = setTimeout(() => { isResolved = false + resolvedValue = null secondaryPromise = null }, cacheTimeout) } isResolved = true - if (options?.onResolve) options.onResolve() + resolvedValue = result + if (options?.onResolve) options.onResolve(resolvedValue) return result }) } else if (isResolved) { @@ -56,9 +59,13 @@ export default function combinePersistenceAdapters< () => secondaryAdapter.load(), { cacheTimeout: 100, - onResolve: () => { - if (!handleChange) return - void handleChange() + onResolve: (result) => { + if (handleChange) void handleChange() + void primaryAdapter.save(result.items || [], { + added: result.changes?.added || [], + modified: result.changes?.modified || [], + removed: result.changes?.removed || [], + }) }, }, )