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

Method fetchOptimistic

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

Source from the content-addressed store, hash-verified

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