Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| abe8089fdd | |||
| 773260b97e | |||
| 9830ea7607 | |||
| 7e06de77aa |
@@ -170,20 +170,45 @@ export function useQueryImpl<
|
||||
|
||||
// SSR
|
||||
let firstResolve: (() => void) | undefined
|
||||
let firstResolveTriggered = false
|
||||
let firstReject: ((apolloError: ApolloError) => void) | undefined
|
||||
let firstRejectError: undefined | ApolloError
|
||||
|
||||
const tryFirstResolve = () => {
|
||||
firstResolveTriggered = true
|
||||
if (firstResolve) firstResolve()
|
||||
}
|
||||
|
||||
const tryFirstReject = (apolloError: ApolloError) => {
|
||||
firstRejectError = apolloError
|
||||
if (firstReject) firstReject(apolloError)
|
||||
}
|
||||
|
||||
const resetFirstResolveReject = () => {
|
||||
firstResolve = undefined
|
||||
firstReject = undefined
|
||||
firstResolveTriggered = false
|
||||
firstRejectError = undefined
|
||||
stop()
|
||||
}
|
||||
|
||||
vm && onServerPrefetch?.(() => {
|
||||
if (!isEnabled.value || (isServer && currentOptions.value?.prefetch === false)) return
|
||||
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
firstResolve = () => {
|
||||
resetFirstResolveReject()
|
||||
resolve()
|
||||
firstResolve = undefined
|
||||
firstReject = undefined
|
||||
}
|
||||
firstReject = (apolloError: ApolloError) => {
|
||||
resetFirstResolveReject()
|
||||
reject(apolloError)
|
||||
firstResolve = undefined
|
||||
firstReject = undefined
|
||||
}
|
||||
|
||||
if (firstResolveTriggered) {
|
||||
firstResolve()
|
||||
} else if (firstRejectError) {
|
||||
firstReject(firstRejectError)
|
||||
}
|
||||
}).then(stop).catch(stop)
|
||||
})
|
||||
@@ -205,7 +230,7 @@ export function useQueryImpl<
|
||||
started || !isEnabled.value ||
|
||||
(isServer && currentOptions.value?.prefetch === false)
|
||||
) {
|
||||
if (firstResolve) firstResolve()
|
||||
tryFirstResolve()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -259,10 +284,7 @@ export function useQueryImpl<
|
||||
processError(resultErrorsToApolloError(queryResult.errors))
|
||||
}
|
||||
|
||||
if (firstResolve) {
|
||||
firstResolve()
|
||||
stop()
|
||||
}
|
||||
tryFirstResolve()
|
||||
}
|
||||
|
||||
function processNextResult (queryResult: ApolloQueryResult<TResult>) {
|
||||
@@ -282,10 +304,7 @@ export function useQueryImpl<
|
||||
processNextResult((query.value as ObservableQuery<TResult, TVariables>).getCurrentResult())
|
||||
}
|
||||
processError(apolloError)
|
||||
if (firstReject) {
|
||||
firstReject(apolloError)
|
||||
stop()
|
||||
}
|
||||
tryFirstReject(apolloError)
|
||||
// The observable closes the sub if an error occurs
|
||||
resubscribeToQuery()
|
||||
}
|
||||
@@ -312,7 +331,7 @@ export function useQueryImpl<
|
||||
* Stop watching the query
|
||||
*/
|
||||
function stop () {
|
||||
if (firstResolve) firstResolve()
|
||||
tryFirstResolve()
|
||||
if (!started) return
|
||||
started = false
|
||||
loading.value = false
|
||||
|
||||
Reference in New Issue
Block a user