[TanStakQuery] 쿼리 재시도(Query Retries)

Jeris·2023년 5월 22일
0

useQuery 쿼리가 실패(쿼리 함수가 오류를 발생시킴)하면, 해당 쿼리의 요청이 최대 연속 재시도 횟수(기본값은 3)에 도달하지 않았거나 재시도 허용 여부를 결정하는 함수가 제공된 경우 TanStack Query가 자동으로 쿼리를 재시도합니다.

재시도들은 전역 수준과 개별 쿼리 수준 모두에서 구현할 수 있습니다.

  • retry = false로 설정하면 재시도가 비활성화됩니다.
  • retry = 6으로 설정하면 실패한 요청을 6번 재시도한 후 함수가 던진 최종 오류를 표시합니다.
  • retry = true로 설정하면 실패한 요청을 무한히 재시도합니다.
  • retry = (failureCount, error) => ...로 설정하면 요청이 실패한 이유에 따라 커스텀 로직을 사용할 수 있습니다.
import { useQuery } from '@tanstack/react-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
})

Retry Delay

기본적으로 TanStack 쿼리에서 재시도는 요청이 실패한 직후에 수행되지 않습니다. 표준에 따라 각 재시도 시도에 back-off 딜레이가 점진적으로 적용됩니다.

기본 retryDelay는 각 시도마다 두 배(1000ms부터 시작)로 설정되지만 30초를 초과할 수 없습니다:

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

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

function App() {
  return <QueryClientProvider client={queryClient}>...</QueryClientProvider>
}

권장되지는 않지만 공급자 및 개별 쿼리 옵션 모두에서 retryDelay 함수/정수를 override할 수 있습니다. 함수 대신 정수로 설정하면 지연 시간은 항상 같은 시간이 됩니다:

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

Reference

profile
job's done

0개의 댓글