我在应用程序中有一个轮询流程,它是一系列运行依赖于之前完成的查询。直到我开始使用 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
你能给我建议吗?谢谢。