Wenn eine useQuery-Abfrage fehlschlägt (die Abfragefunktion löst einen Fehler aus), versucht TanStack Query die Abfrage automatisch erneut, wenn die Anfrage für diese Abfrage das maximale Limit aufeinanderfolgender Wiederholungsversuche (standardmäßig 3) noch nicht erreicht hat oder wenn eine Funktion bereitgestellt wird, um zu bestimmen, ob ein Wiederholungsversuch zulässig ist.
Sie können Wiederholungsversuche sowohl auf globaler Ebene als auch auf individueller Abfrageebene konfigurieren.
Auf dem Server sind Wiederholungsversuche standardmäßig auf 0 eingestellt, um das Server-Rendering so schnell wie möglich zu gestalten.
import { useQuery } from '@tanstack/solid-query'
// Make a specific query retry a certain number of times
const result = useQuery(() => {
queryKey: ['todos', 1],
queryFn: fetchTodoListPage,
retry: 10, // Will retry failed requests 10 times before displaying an error
})
import { useQuery } from '@tanstack/solid-query'
// Make a specific query retry a certain number of times
const result = useQuery(() => {
queryKey: ['todos', 1],
queryFn: fetchTodoListPage,
retry: 10, // Will retry failed requests 10 times before displaying an error
})
Info: Der Inhalt der error-Eigenschaft wird bis zum letzten Wiederholungsversuch Teil der failureReason-Antwort-Eigenschaft von useQuery sein. Im obigen Beispiel sind alle Fehlerinhalte für die ersten 9 Wiederholungsversuche (insgesamt 10 Versuche) Teil der failureReason-Eigenschaft und schließlich werden sie Teil von error sein, wenn der Fehler nach allen Wiederholungsversuchen weiterhin besteht.
Standardmäßig finden Wiederholungsversuche in TanStack Query nicht unmittelbar nach einem fehlgeschlagenen Anfrage statt. Wie üblich wird jeder Wiederholungsversuch schrittweise mit einer Backoff-Verzögerung versehen.
Die Standard- retryDelay ist so eingestellt, dass sie sich mit jedem Versuch verdoppelt (beginnend bei 1000ms), aber 30 Sekunden nicht überschreitet.
// Configure for all queries
import {
QueryCache,
QueryClient,
QueryClientProvider,
} from '@tanstack/solid-query'
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
})
function App() {
return <QueryClientProvider client={queryClient}>...</QueryClientProvider>
}
// Configure for all queries
import {
QueryCache,
QueryClient,
QueryClientProvider,
} from '@tanstack/solid-query'
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
})
function App() {
return <QueryClientProvider client={queryClient}>...</QueryClientProvider>
}
Auch wenn es nicht empfohlen wird, können Sie die retryDelay Funktion/Integer sowohl im Provider als auch in den einzelnen Query-Optionen überschreiben. Wenn ein Integer anstelle einer Funktion gesetzt wird, ist die Verzögerung immer gleich lang
const result = useQuery(() => {
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
})
const result = useQuery(() => {
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
})