当 useQuery 查询失败(查询函数抛出错误)时,如果该查询的请求尚未达到最大连续重试次数(默认为 3 次)或提供了用于确定是否允许重试的函数,TanStack Query 将自动重试该查询。
您可以在全局级别和单个查询级别配置重试。
在服务器上,重试默认为 0,以使服务器渲染尽可能快。
import { useQuery } from '@tanstack/vue-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
})
import { useQuery } from '@tanstack/vue-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
})
信息:在最后一次重试尝试之前,error 属性的内容将是 useQuery 的 failureReason 响应属性的一部分。因此,在上面的示例中,在最初的 9 次重试尝试(总共 10 次尝试)中,任何错误内容都将是 failureReason 属性的一部分,最终在所有重试尝试后如果错误仍然存在,它们将是 error 属性的一部分。
默认情况下,TanStack Query 中的重试不会在请求失败后立即发生。按照标准,每次重试尝试都会逐渐应用回退延迟。
默认的 retryDelay 设置为每次尝试翻倍(从 1000ms 开始),但不会超过 30 秒。
import { VueQueryPlugin } from '@tanstack/vue-query'
const vueQueryPluginOptions = {
queryClientConfig: {
defaultOptions: {
queries: {
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
},
}
app.use(VueQueryPlugin, vueQueryPluginOptions)
import { VueQueryPlugin } from '@tanstack/vue-query'
const vueQueryPluginOptions = {
queryClientConfig: {
defaultOptions: {
queries: {
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
},
}
app.use(VueQueryPlugin, vueQueryPluginOptions)
虽然不推荐,但你显然可以在插件和单独的查询选项中覆盖 retryDelay 函数/整数。如果设置为整数而不是函数,延迟将始终是相同的时间量。
const result = useQuery({
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
})
const result = useQuery({
queryKey: ['todos'],
queryFn: fetchTodoList,
retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries
})