Skip to content

Commit fce1597

Browse files
committed
fix(query-db-collection): sync=on-demand tanstack-query lifecycle
1 parent 8ef8f09 commit fce1597

File tree

1 file changed

+20
-14
lines changed
  • packages/query-db-collection/src

1 file changed

+20
-14
lines changed

packages/query-db-collection/src/query.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -692,13 +692,16 @@ export function queryCollectionOptions(
692692
// Query is still loading, wait for the first result
693693
return new Promise<void>((resolve, reject) => {
694694
const unsubscribe = observer.subscribe((result) => {
695-
if (result.isSuccess) {
696-
unsubscribe()
697-
resolve()
698-
} else if (result.isError) {
699-
unsubscribe()
700-
reject(result.error)
701-
}
695+
// Use a microtask in case `subscribe` is called synchronously, before `unsubscribe` is initialized
696+
queueMicrotask(() => {
697+
if (result.isSuccess) {
698+
unsubscribe()
699+
resolve()
700+
} else if (result.isError) {
701+
unsubscribe()
702+
reject(result.error)
703+
}
704+
})
702705
})
703706
})
704707
}
@@ -745,13 +748,16 @@ export function queryCollectionOptions(
745748
// Create a promise that resolves when the query result is first available
746749
const readyPromise = new Promise<void>((resolve, reject) => {
747750
const unsubscribe = localObserver.subscribe((result) => {
748-
if (result.isSuccess) {
749-
unsubscribe()
750-
resolve()
751-
} else if (result.isError) {
752-
unsubscribe()
753-
reject(result.error)
754-
}
751+
// Use a microtask in case `subscribe` is called synchronously, before `unsubscribe` is initialized
752+
queueMicrotask(() => {
753+
if (result.isSuccess) {
754+
unsubscribe()
755+
resolve()
756+
} else if (result.isError) {
757+
unsubscribe()
758+
reject(result.error)
759+
}
760+
})
755761
})
756762
})
757763

0 commit comments

Comments
 (0)