使用TanStack Query处理创建任务、轮询及结果获取工作流的方案问询
React Query 任务工作流实现方案探讨
先明确useQuery与useMutation的核心适用场景:
- 读取数据:使用
useQuery - 创建/更新/删除数据:使用
useMutation
针对创建任务→轮询任务状态→获取任务结果这类包含三个独立接口的工作流,有没有更合适的实现方案?
使用useQuery的痛点
用useQuery处理这类场景十分棘手,主要问题包括:
- 需要额外的mutationFn来启动任务流程
- 要为轮询状态、获取结果分别设置独立的
useQuery钩子 - 得依赖状态变量来启用/禁用各个钩子
- 需要额外代码和钩子同步更新应用内的数据
- 唯一优势是
useQuery内置的refetch和retry功能
使用useMutation的优劣
用useMutation处理会稍好一些:
- 可以把所有逻辑整合到同一个mutationFn中
- 但需要手动编写轮询和重试逻辑
有没有开发者有更优的处理方法?
以下是当前的实现思路:
mutationFn: async () => { const data = await startTask(); let status = await getStatus(data); // 这里需要手动添加重试逻辑 while (status === "processing") { await sleep(1000); status = await getStatus(data); } const results = await getResults(data); return results; }
内容的提问来源于stack exchange,提问作者Shakur Smith
相关产品推荐
相关产品推荐

