Javascript 从React query中的另一个查询的重试中重新提取不同的查询
在我的解决方案中,我将React Query的Javascript 从React query中的另一个查询的重试中重新提取不同的查询,javascript,reactjs,react-query,Javascript,Reactjs,React Query,在我的解决方案中,我将React Query的useQuery钩子包装在自己的钩子中,以具有特定的重试逻辑: 导出函数useMyQuery(键,queryFn,选项={}){ const queryClient=useQueryClient(); const query=useReactQuery(key,queryFn{ …选项, 重试:异步(计数,错误)=>等待重试(计数,错误,查询客户端), }); 返回查询; } 重试功能本身如下: 导出异步函数重试(计数、错误、查询客户端){ 如果(
useQuery
钩子包装在自己的钩子中,以具有特定的重试逻辑:
导出函数useMyQuery(键,queryFn,选项={}){
const queryClient=useQueryClient();
const query=useReactQuery(key,queryFn{
…选项,
重试:异步(计数,错误)=>等待重试(计数,错误,查询客户端),
});
返回查询;
}
重试
功能本身如下:
导出异步函数重试(计数、错误、查询客户端){
如果(错误?.statusCode==401){
//捕获401,尝试刷新令牌;
if(等待刷新令牌(queryClient)){
queryClient.refetchQueries('fetchSession');
返回true;
}
}
//重试3次
返回计数<3;
}
最后,我的fetchSession
查询如下所示:
const{data}=useQuery('fetchSession',()=>{
log('fetching new session…');
返回Auth.currentSession();
})
我的目标是在成功刷新上述代码中的令牌后触发“fetchSession”查询的重新蚀刻,但是,查询永远不会重新蚀刻,即在刷新令牌后永远不会运行查询体。除了在
queryClient
上使用refetchQueries
方法外,我还尝试了invalidateQueries
,但没有任何效果。重试函数不是异步的-它希望您返回一个布尔值,而不是承诺
,因此这不起作用
我可以使用axios拦截器(如果您正在使用该拦截器)或仅在您的queryFn中执行此逻辑:
useQuery('fetchSession', async () => {
try {
const { data } = await axios.get(...)
return data
} catch(error) {
if (error.statuscode === 401) {
const token = await refreshToken(queryClient))
const { data } = await axios.get(...) // pass token here? don't know how this works for you :)
return data
} else {
throw error
}
}
})