tRPCttRPC
Powered by
b0oB
tRPC•3y ago•
2 replies
b0o

Can't get wsLink's retryDelayMs to work

I'm trying to add some backoff for when connecting to my websocket server fails. I've got the following code, but the
retryDelayMs
retryDelayMs
function never seems to be called (I don't see any console messages), and the wsLink keeps trying to reconnect immediately:


const TrpcProviderInner: React.FC<{ children: React.ReactNode }> = p => {
  const [queryClient] = useState(() => new QueryClient())
  const [trpcClient] = useState(() =>
    api.createClient({
      transformer: superjson,
      links: [
        loggerLink({
          enabled: opts =>
            process.env.NODE_ENV === 'development' ||
            (opts.direction === 'down' && opts.result instanceof Error),
        }),
        wsLink<Router>({
          client: createWSClient({
            url: getWsUrl(),
            retryDelayMs: (attemptIndex: number) => {
              console.log('retrying', attemptIndex)
              switch (attemptIndex) {
                case 0:
                  return 50
                case 1:
                  return 100
                case 2:
                  return 200
                case 3:
                  return 500
                case 4:
                  return 1000
                default:
                  return 5000
              }
            },
          }),
        }),
      ],
    }),
  )
  return (
    <api.Provider client={trpcClient} queryClient={queryClient}>
      <QueryClientProvider client={queryClient}>{p.children}</QueryClientProvider>
    </api.Provider>
  )
}
const TrpcProviderInner: React.FC<{ children: React.ReactNode }> = p => {
  const [queryClient] = useState(() => new QueryClient())
  const [trpcClient] = useState(() =>
    api.createClient({
      transformer: superjson,
      links: [
        loggerLink({
          enabled: opts =>
            process.env.NODE_ENV === 'development' ||
            (opts.direction === 'down' && opts.result instanceof Error),
        }),
        wsLink<Router>({
          client: createWSClient({
            url: getWsUrl(),
            retryDelayMs: (attemptIndex: number) => {
              console.log('retrying', attemptIndex)
              switch (attemptIndex) {
                case 0:
                  return 50
                case 1:
                  return 100
                case 2:
                  return 200
                case 3:
                  return 500
                case 4:
                  return 1000
                default:
                  return 5000
              }
            },
          }),
        }),
      ],
    }),
  )
  return (
    <api.Provider client={trpcClient} queryClient={queryClient}>
      <QueryClientProvider client={queryClient}>{p.children}</QueryClientProvider>
    </api.Provider>
  )
}
tRPCJoin
Move Fast & Break Nothing. End-to-end typesafe APIs made easy.
5,015Members
Resources
Recent Announcements

Similar Threads

Was this page helpful?

Similar Threads

Can't get client to work
HuzefHHuzef / ❓-help
4y ago
Can't get Server-Side Helpers NextJS example to work
Square0neSSquare0ne / ❓-help
3y ago
How to handle authentication with wsLink
Answer OverflowAAnswer Overflow / ❓-help
3y ago
Error "Subscriptions should use wsLink"
jaacsenJjaacsen / ❓-help
2y ago