You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:03:24