Framework
Version

Query-Wiederholungen

Wenn eine injectQuery-Abfrage fehlschlägt (die Abfragefunktion wirft einen Fehler), versucht TanStack Query die Abfrage automatisch erneut, wenn die Anfrage dieser Abfrage die maximale Anzahl aufeinanderfolgender Wiederholungen (3) nicht erreicht hat oder eine Funktion bereitgestellt wird, um zu bestimmen, ob eine Wiederholung zulässig ist.

Sie können Wiederholungsversuche sowohl auf globaler Ebene als auch auf individueller Abfrageebene konfigurieren.

  • Wenn Sie retry = false setzen, werden Wiederholungsversuche deaktiviert.
  • Wenn Sie retry = 6 setzen, werden fehlgeschlagene Anfragen 6 Mal wiederholt, bevor der endgültige Fehler angezeigt wird, der von der Funktion ausgelöst wurde.
  • Wenn Sie retry = true setzen, werden fehlgeschlagene Anfragen unendlich oft wiederholt.
  • Wenn Sie retry = (failureCount, error) => ... setzen, können Sie benutzerdefinierte Logik basierend darauf implementieren, warum die Anfrage fehlgeschlagen ist.
ts
import { injectQuery } from '@tanstack/angular-query-experimental'

// Make a specific query retry a certain number of times
const result = injectQuery(() => ({
  queryKey: ['todos', 1],
  queryFn: fetchTodoListPage,
  retry: 10, // Will retry failed requests 10 times before displaying an error
}))
import { injectQuery } from '@tanstack/angular-query-experimental'

// Make a specific query retry a certain number of times
const result = injectQuery(() => ({
  queryKey: ['todos', 1],
  queryFn: fetchTodoListPage,
  retry: 10, // Will retry failed requests 10 times before displaying an error
}))

Info: Der Inhalt der error-Eigenschaft ist Teil der failureReason-Antwort-Eigenschaft von injectQuery bis zum letzten Wiederholungsversuch. Im obigen Beispiel sind also alle Fehlermeldungen Teil der failureReason-Eigenschaft für die ersten 9 Wiederholungsversuche (insgesamt 10 Versuche) und schließlich sind sie Teil von error nach dem letzten Versuch, wenn der Fehler nach allen Wiederholungsversuchen weiterhin besteht.

Wiederholungsversuch-Verzögerung

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.

ts
// Configure for all queries
import {
  QueryCache,
  QueryClient,
  QueryClientProvider,
} from '@tanstack/angular-query-experimental'

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
    },
  },
})

bootstrapApplication(AppComponent, {
  providers: [provideTanStackQuery(queryClient)],
})
// Configure for all queries
import {
  QueryCache,
  QueryClient,
  QueryClientProvider,
} from '@tanstack/angular-query-experimental'

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
    },
  },
})

bootstrapApplication(AppComponent, {
  providers: [provideTanStackQuery(queryClient)],
})

Obwohl nicht empfohlen, können Sie die retryDelay-Funktion/Integer sowohl in den Plugin- als auch in den einzelnen Abfrageoptionen überschreiben. Wenn ein Integer anstelle einer Funktion gesetzt wird, ist die Verzögerung immer gleich lang

ts
const result = injectQuery(() => ({
  queryKey: ['todos'],
  queryFn: fetchTodoList,
  retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
}))
const result = injectQuery(() => ({
  queryKey: ['todos'],
  queryFn: fetchTodoList,
  retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
}))