我不明白为什么Reaction查询(在本例中由tRPC包装)会有这样的行为.
假设我们有一个组件,它进行两次API调用以获取一些数据.
export const MyComponent = () => {
const sample1Result = api.myRouter.sampleRequest1.useQuery()
const sample2Result = api.myRouter.sampleRequest2.useQuery()
return (
<div>
<div> {sample1Result.data ? "Query 1 returned" : "Query 1 waiting"} </div>
<div> {sample2Result.data ? "Query 2 returned" : "Query 2 waiting"} </div>
</div>
)
}
在后台,我们有两个API调用(配置在tRPC路由上),在本例中,它们被强制分别花费5秒和10秒.
sampleRequest1: publicProcedure
.query(async () => {
console.log(`Called sampleRequest1`)
await new Promise(resolve => setTimeout(resolve, 5000))
console.log(`Returning from sampleRequest1`)
return "Hello 1"
}),
sampleRequest2: publicProcedure
.query(async () => {
console.log(`Called sampleRequest2`)
await new Promise(resolve => setTimeout(resolve, 10000))
console.log(`Returning from sampleRequest2`)
return "Hello 2"
}),
实际情况是,这两个查询都会像预期的那样立即启动.但是在组件中,我没有看到预期的5秒后"Query 1 Return"和10秒后"Query 2 Return".相反,当两个API调用都完成时,它们都只在10秒后更新组件.是什么导致Reaction-Query无法处理在不同时间完成以立即更新组件的并发查询?
从REACTION-QUERY和tRPC文档中,似乎暗示了并行性,实际上它是在并行调用API.但如果我不能立即得到每个查询的结果,那就不好了.FWIW,如果useQuery位于不同的react 组件中,或者即使我在Promise.all中使用并行Mutations ,这个问题仍然会发生.