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