From 2f988519897a0fbed7b7fb49be886bc3c2d88071 Mon Sep 17 00:00:00 2001 From: Dmitrii Troitskii Date: Wed, 18 Feb 2026 23:58:40 +0000 Subject: [PATCH 1/2] fix(react-db): handle rejected/stale setWindow promises in useLiveInfiniteQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three issues in the useEffect that calls setWindow(): 1. No .catch() — if setWindow rejects, isFetchingNextPage stays true forever with no error surfaced. 2. No cleanup — if the effect re-runs while a previous promise is pending, the stale .then() can set isFetchingNextPage=false prematurely while new loading is in progress. 3. Unhandled promise rejection — the promise has no rejection handler, causing an unhandled rejection warning. Add .catch() with error logging, a cancelled flag with useEffect cleanup to ignore stale promise settlements. Fixes TanStack/db#1240 --- packages/react-db/src/useLiveInfiniteQuery.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/react-db/src/useLiveInfiniteQuery.ts b/packages/react-db/src/useLiveInfiniteQuery.ts index 0351c6d0c..360505c2d 100644 --- a/packages/react-db/src/useLiveInfiniteQuery.ts +++ b/packages/react-db/src/useLiveInfiniteQuery.ts @@ -233,6 +233,7 @@ export function useLiveInfiniteQuery( if (!isCollection && !queryResult.isReady) return // Adjust the window + let cancelled = false const result = utils.setWindow({ offset: expectedOffset, limit: expectedLimit, @@ -240,12 +241,23 @@ export function useLiveInfiniteQuery( if (result !== true) { setIsFetchingNextPage(true) - result.then(() => { - setIsFetchingNextPage(false) - }) + result + .then(() => { + if (!cancelled) setIsFetchingNextPage(false) + }) + .catch((error: unknown) => { + if (!cancelled) { + setIsFetchingNextPage(false) + console.error(`useLiveInfiniteQuery: setWindow failed:`, error) + } + }) } else { setIsFetchingNextPage(false) } + + return () => { + cancelled = true + } }, [ isCollection, queryResult.collection, From bc1a70598c65b9062696a4b21efc3885e4db4689 Mon Sep 17 00:00:00 2001 From: Dmitrii Troitskii Date: Thu, 19 Feb 2026 10:29:53 +0000 Subject: [PATCH 2/2] add changeset --- .changeset/fix-setwindow-promises.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fix-setwindow-promises.md diff --git a/.changeset/fix-setwindow-promises.md b/.changeset/fix-setwindow-promises.md new file mode 100644 index 000000000..5cf337e8a --- /dev/null +++ b/.changeset/fix-setwindow-promises.md @@ -0,0 +1,5 @@ +--- +"@tanstack/react-db": patch +--- + +fix(react-db): handle rejected/stale setWindow promises in useLiveInfiniteQuery