查询重试
当 useQuery 查询失败时(查询函数抛出错误),如果该查询的请求尚未达到最大连续重试次数(默认为 3 次),或者提供了用于确定是否允许重试的函数,TanStack Query 将自动重试该查询。
你可以在全局级别和单个查询级别配置重试。
设置
retry = false将禁用重试。设置
retry = 6将在显示函数抛出的最终错误之前,重试失败的请求 6 次。设置
retry = true将无限次重试失败的请求。设置
retry = (failureCount, error) => ...可以根据请求失败的原因实现自定义逻辑。
在服务器端,默认重试次数为
0,以使服务器渲染尽可能快。
import { useQuery } from '@tanstack/react-query'
// 让特定查询重试一定次数
const result = useQuery({
queryKey: ['todos', 1],
queryFn: fetchTodoListPage,
retry: 10, // 在显示错误之前,将失败的请求重试 10 次
})信息:在最后一次重试尝试之前,
error属性的内容将作为useQuery的failureReason响应属性的一部分。因此,在上面的例子中,前 9 次重试尝试(总共 10 次尝试)中的任何错误内容都将作为failureReason属性的一部分,如果在所有重试尝试后错误仍然存在,则最终会作为error的一部分。
重试延迟(Retry Delay)
默认情况下,TanStack Query 的重试不会在请求失败后立即进行。按照标准做法,每次重试尝试都会逐渐增加一个退避延迟。
默认的 retryDelay 设置为每次尝试时加倍(从 1000 毫秒开始),但不超过 30 秒:
// 为所有查询配置
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>
}尽管不推荐,但你显然可以在 Provider 和单个查询选项中覆盖 retryDelay 函数/整数。如果将其设置为整数而不是函数,则延迟时间将始终相同:
const result = useQuery({
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // 无论重试多少次,都将始终等待 1000 毫秒后重试
})最后更新于
这有帮助吗?