@@ -66,11 +66,9 @@ export class QueryObserver<
6666 TQueryKey
6767 >
6868 private previousQueryResult ?: QueryObserverResult < TData , TError >
69- private previousSelectError : TError | null
70- private previousSelect ?: {
71- fn : ( data : TQueryData ) => TData
72- result : TData
73- }
69+ private selectError : TError | null
70+ private selectFn ?: ( data : TQueryData ) => TData
71+ private selectResult ?: TData
7472 private staleTimeoutId ?: ReturnType < typeof setTimeout >
7573 private refetchIntervalId ?: ReturnType < typeof setInterval >
7674 private currentRefetchInterval ?: number | false
@@ -91,7 +89,7 @@ export class QueryObserver<
9189 this . client = client
9290 this . options = options
9391 this . trackedProps = new Set ( )
94- this . previousSelectError = null
92+ this . selectError = null
9593 this . bindMethods ( )
9694 this . setOptions ( options )
9795 }
@@ -462,29 +460,23 @@ export class QueryObserver<
462460 if (
463461 prevResult &&
464462 state . data === prevResultState ?. data &&
465- options . select === this . previousSelect ?. fn &&
466- ! this . previousSelectError
463+ options . select === this . selectFn
467464 ) {
468- data = this . previousSelect . result
465+ data = this . selectResult
469466 } else {
470467 try {
468+ this . selectFn = options . select
471469 data = options . select ( state . data )
472470 if ( options . structuralSharing !== false ) {
473471 data = replaceEqualDeep ( prevResult ?. data , data )
474472 }
475- this . previousSelect = {
476- fn : options . select ,
477- result : data ,
478- }
479- this . previousSelectError = null
473+ this . selectResult = data
474+ this . selectError = null
480475 } catch ( selectError ) {
481476 if ( process . env . NODE_ENV !== 'production' ) {
482477 this . client . getLogger ( ) . error ( selectError )
483478 }
484- error = selectError as TError
485- this . previousSelectError = selectError as TError
486- errorUpdatedAt = Date . now ( )
487- status = 'error'
479+ this . selectError = selectError as TError
488480 }
489481 }
490482 }
@@ -521,15 +513,12 @@ export class QueryObserver<
521513 placeholderData
522514 )
523515 }
524- this . previousSelectError = null
516+ this . selectError = null
525517 } catch ( selectError ) {
526518 if ( process . env . NODE_ENV !== 'production' ) {
527519 this . client . getLogger ( ) . error ( selectError )
528520 }
529- error = selectError as TError
530- this . previousSelectError = selectError as TError
531- errorUpdatedAt = Date . now ( )
532- status = 'error'
521+ this . selectError = selectError as TError
533522 }
534523 }
535524 }
@@ -541,6 +530,13 @@ export class QueryObserver<
541530 }
542531 }
543532
533+ if ( this . selectError ) {
534+ error = this . selectError as any
535+ data = this . selectResult
536+ errorUpdatedAt = Date . now ( )
537+ status = 'error'
538+ }
539+
544540 const isFetching = fetchStatus === 'fetching'
545541
546542 const result : QueryObserverBaseResult < TData , TError > = {
@@ -554,6 +550,7 @@ export class QueryObserver<
554550 error,
555551 errorUpdatedAt,
556552 failureCount : state . fetchFailureCount ,
553+ errorUpdateCount : state . errorUpdateCount ,
557554 isFetched : state . dataUpdateCount > 0 || state . errorUpdateCount > 0 ,
558555 isFetchedAfterMount :
559556 state . dataUpdateCount > queryInitialState . dataUpdateCount ||
0 commit comments