Lien de réessai
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
retryLink est un lien qui vous permet de réessayer les opérations ayant échoué dans votre client tRPC. Il offre une méthode personnalisable pour gérer les erreurs transitoires, telles que les défaillances réseau ou les erreurs serveur, en réessayant automatiquement les requêtes échouées selon des conditions spécifiées.
Si vous utilisez @trpc/react-query, vous n'aurez généralement pas besoin de ce lien car il est intégré aux hooks useQuery() et useMutation() de @tanstack/react-query.
Utilisation
Vous pouvez importer et ajouter retryLink au tableau links lors de la création de votre client tRPC. Ce lien peut être placé avant ou après d'autres liens dans votre configuration, selon vos besoins.
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',}),],});
Dans l'exemple ci-dessus, nous ajoutons le retryLink avant le httpBatchLink. La fonction retry est obligatoire et définit quand réessayer. Dans cet exemple, elle va :
-
Réessayer la requête si l'erreur est une
TRPCClientErroravec un code d'état 500 ou si nous n'avons pas pu obtenir une erreur tRPC valide. -
Réessaiera la requête jusqu'à 3 fois.
Options
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;}
Gestion des événements tracked()
Lors de l'utilisation de retryLink avec des abonnements utilisant tracked(), le lien inclura automatiquement le dernier ID d'événement connu lors du réessai. Cela garantit qu'un abonnement reconnecté peut reprendre là où il s'était arrêté sans manquer d'événements.
Par exemple, si vous utilisez Server-sent Events (SSE) avec httpSubscriptionLink, retryLink gérera automatiquement la reconnexion avec le dernier ID d'événement lors d'erreurs comme 401 Unauthorized.