0

我在应用程序中有一个轮询流程,它是一系列运行依赖于之前完成的查询。直到我开始使用 react-query,我才使用async/awaitPromise.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只在我有之后运行data1data2但是在第二次间隔运行中,因为data1并且data2已经不是假的,它只是并行发送所有查询,这不是理想的结果。

可能值得一提的是问题的背景和数据。data1并且data2不相互依赖(可以并行完成),但应该在之前获取,data3因为data3它是基于来自data1和的参数呈现的data2

你能给我建议吗?谢谢。

4

1 回答 1

1

您可以使用此处记录的“依赖查询”:https ://react-query.tanstack.com/docs/guides/queries#dependent-queries

这可以防止您的第三个查询运行,直到 data1 和 data2 可用。

于 2020-10-21T09:25:31.820 回答