我在应用程序中有一个轮询流程,它是一系列运行依赖于之前完成的查询。直到我开始使用 react-query,我才使用async/await
并Promise.all()
知道以前的请求是否完成。
流程示例(使用 react-query 之前):
setInterval(async () => {
await Promise.all([query1, query2]);
await query3();
}, INTERVAL_TIME);
有了这个,我得到了一个轮询间隔,我知道 query3 只有在 query1 && query2 完成后才会运行。
现在我正在努力使用react-query
. 我知道enabled
可以传递给useQuery
钩子的参数,但它只适用于第一次运行:
const {data: data1} = useQuery('query1', query1, { refetchInterval: INTERVAL_TIME });
const {data: data2} = useQuery('query2', query2, { refetchInterval: INTERVAL_TIME });
const {data: data3} = useQuery('query3', query3, { refetchInterval: INTERVAL_TIME , enabled: !!data1 && !!data3})
上面的代码片段给我的结果是第一次间隔运行没问题,query3
只在我有之后运行data1
,data2
但是在第二次间隔运行中,因为data1
并且data2
已经不是假的,它只是并行发送所有查询,这不是理想的结果。
可能值得一提的是问题的背景和数据。data1
并且data2
不相互依赖(可以并行完成),但应该在之前获取,data3
因为data3
它是基于来自data1
和的参数呈现的data2
你能给我建议吗?谢谢。