React Query多API请求问题:useMutation仅执行第二个异步请求
问题分析与解决
你的代码里第一个请求没执行的核心原因是Promise.all的数组里误用了逗号运算符:你用括号把两个axios请求括起来,这会触发逗号运算符的行为——它会依次执行所有表达式,但只返回最后一个表达式的结果,所以第一个axios.put的调用结果根本没被加入Promise.all的待处理数组,自然不会执行。
另外根据你的实际需求,需要把第一个PUT请求改成POST,同时axios默认会自动序列化JSON数据,不需要手动调用JSON.stringify,可以简化写法。
修正后的代码如下:
const first = useMutation({ mutationFn: (data) => { return Promise.all([ // 把PUT改成POST,调整为新增接口,简化数据传递 axios.post( "https://dummyjson.com/products/add", { title: "iPhone Galaxy +1", } ), axios.post( "https://reqres.in/api/users", { name: "morpheus", job: "leader", } ) ]); }, onSuccess: (data) => { // data是数组,按顺序存储两个请求的响应结果 console.log("两个请求的响应:", data); }, onError: (error) => { console.log("请求错误:", error); }, });
关键修改点:
- 去掉包裹两个axios请求的括号,让它们作为独立Promise存入
Promise.all数组,确保两个请求并行执行 - 将第一个请求的
axios.put改为axios.post,并调整dummyjson的接口为产品新增接口(原/products/1是更新接口,POST请求需用新增接口才能正常返回结果) - 移除手动
JSON.stringify,直接传入JS对象,axios会自动处理为JSON格式请求体
调用这个mutation时,两个POST请求会同时发起,onSuccess里的data会按数组顺序返回两个请求的响应结果。
内容的提问来源于stack exchange,提问作者pavan octa
相关产品推荐
相关产品推荐

