Försök igen-länk
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
retryLink är en länk som låter dig försöka igen med misslyckade operationer i din tRPC-klient. Den ger ett anpassningsbart sätt att hantera tillfälliga fel, som nätverksproblem eller serverfel, genom att automatiskt försöka utföra de misslyckade förfrågningarna igen baserat på angivna villkor.
Om du använder @trpc/react-query behöver du generellt sett inte den här länken eftersom den är inbyggd i useQuery()- och useMutation()-hookarna från @tanstack/react-query.
Användning
Du kan importera och lägga till retryLink i links-arrayen när du skapar din tRPC-klient. Den här länken kan placeras före eller efter andra länkar i din konfiguration, beroende på dina behov.
tsimport {createTRPCClient ,httpBatchLink ,retryLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [retryLink ({retry (opts ) {if (opts .error .data &&opts .error .data .code !== 'INTERNAL_SERVER_ERROR') {// Don't retry on non-500sreturn false;}if (opts .op .type !== 'query') {// Only retry queriesreturn false;}// Retry up to 3 timesreturnopts .attempts <= 3;},// Double every attempt, with max of 30 seconds (starting at 1 second)retryDelayMs : (attemptIndex ) =>Math .min (1000 * 2 **attemptIndex , 30000),}),httpBatchLink ({url : 'http://localhost:3000',}),],});
tsimport {createTRPCClient ,httpBatchLink ,retryLink } from '@trpc/client';import type {AppRouter } from './server';constclient =createTRPCClient <AppRouter >({links : [retryLink ({retry (opts ) {if (opts .error .data &&opts .error .data .code !== 'INTERNAL_SERVER_ERROR') {// Don't retry on non-500sreturn false;}if (opts .op .type !== 'query') {// Only retry queriesreturn false;}// Retry up to 3 timesreturnopts .attempts <= 3;},// Double every attempt, with max of 30 seconds (starting at 1 second)retryDelayMs : (attemptIndex ) =>Math .min (1000 * 2 **attemptIndex , 30000),}),httpBatchLink ({url : 'http://localhost:3000',}),],});
I exemplet ovan lägger vi till retryLink före httpBatchLink. Funktionen retry är obligatorisk och definierar när man ska försöka igen. I detta exempel kommer den att:
-
Försöka utföra förfrågan igen om felet är ett
TRPCClientErrormed statuskod 500 eller om vi inte kunde få ett giltigt tRPC-fel. -
Försöka utföra förfrågan igen upp till 3 gånger.
Alternativ
tsinterfaceRetryLinkOptions <TInferrable extendsInferrableClientTypes > {/*** The retry function*/retry : (opts :RetryFnOptions <TInferrable >) => boolean;/*** The delay between retries in ms (defaults to 0)*/retryDelayMs ?: (attempt : number) => number;}interfaceRetryFnOptions <TInferrable extendsInferrableClientTypes > {/*** The operation that failed*/op :Operation ;/*** The error that occurred*/error :TRPCClientError <TInferrable >;/*** The number of attempts that have been made (including the first call)*/attempts : number;}
tsinterfaceRetryLinkOptions <TInferrable extendsInferrableClientTypes > {/*** The retry function*/retry : (opts :RetryFnOptions <TInferrable >) => boolean;/*** The delay between retries in ms (defaults to 0)*/retryDelayMs ?: (attempt : number) => number;}interfaceRetryFnOptions <TInferrable extendsInferrableClientTypes > {/*** The operation that failed*/op :Operation ;/*** The error that occurred*/error :TRPCClientError <TInferrable >;/*** The number of attempts that have been made (including the first call)*/attempts : number;}
Hantering av tracked()-händelser
När du använder retryLink med prenumerationer som använder tracked() kommer länken automatiskt att inkludera det senast kända händelse-ID:t vid nya försök. Detta säkerställer att när en prenumeration återansluter kan den fortsätta från där den slutade utan att missa några händelser.
Till exempel, om du använder Server-sent Events (SSE) med httpSubscriptionLink, kommer retryLink automatiskt att hantera omanslutning med det senaste händelse-ID:t när fel som 401 Unauthorized uppstår.