MCPcopy Create free account
hub / github.com/TanStack/query / fetchOptimistic

Method fetchOptimistic

packages/query-core/src/queryObserver.ts:287–338  ·  view source on GitHub ↗
(
    options: QueryObserverOptions<
      TQueryFnData,
      TError,
      TData,
      TQueryData,
      TQueryKey
    >,
  )

Source from the content-addressed store, hash-verified

285 }
286
287 fetchOptimistic(
288 options: QueryObserverOptions<
289 TQueryFnData,
290 TError,
291 TData,
292 TQueryData,
293 TQueryKey
294 >,
295 ): Promise<QueryObserverResult<TData, TError>> {
296 const defaultedOptions = this.#client.defaultQueryOptions(options)
297
298 const query = this.#client
299 .getQueryCache()
300 .build(this.#client, defaultedOptions)
301
302 let unsubscribe = () => {}
303 let resolveEarly:
304 | ((result: QueryObserverResult<TData, TError>) => void)
305 | undefined
306
307 const cachePromise = new Promise<QueryObserverResult<TData, TError>>(
308 (resolve) => {
309 resolveEarly = resolve
310 unsubscribe = this.#client.getQueryCache().subscribe((event) => {
311 if (
312 event.type === 'updated' &&
313 event.query.queryHash === query.queryHash &&
314 query.state.data !== undefined
315 ) {
316 unsubscribe()
317 resolve(this.createResult(query, defaultedOptions))
318 }
319 })
320 },
321 )
322
323 return Promise.race([
324 query
325 .fetch()
326 .then(() => {
327 const result = this.createResult(query, defaultedOptions)
328 // Settle the subscriber promise so both branches always settle.
329 // This value is ignored by Promise.race since the fetch branch already won.
330 resolveEarly?.(result)
331 return result
332 })
333 .finally(() => {
334 unsubscribe()
335 }),
336 cachePromise,
337 ])
338 }
339
340 protected fetch(
341 fetchOptions: ObserverFetchOptions,

Callers 5

QueryControllerClass · 0.80
runFunction · 0.80
fetchOptimisticFunction · 0.80
fetchOptimisticFunction · 0.80

Calls 8

createResultMethod · 0.95
resolveFunction · 0.85
defaultQueryOptionsMethod · 0.80
getQueryCacheMethod · 0.80
unsubscribeFunction · 0.50
buildMethod · 0.45
subscribeMethod · 0.45
fetchMethod · 0.45

Tested by

no test coverage detected