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

为何useMutation不返回Promise?无法用await获取结果的疑问

问题原因与解决办法

原因

useMutation返回的默认mutate函数并不返回Promise,它的设计逻辑是通过回调函数(如onSuccess、onError)或者组件内的状态(data、error、isLoading)来处理请求结果,而非直接支持await语法,所以你无法用await获取它的执行结果,VS Code的类型提示也会明确这一点。

解决办法

方法1:使用mutateAsync(推荐)

useMutation同时提供了mutateAsync方法,它专门返回Promise,完全支持await语法,适配你的异步函数写法。

修改代码如下:

// 替换mutate为mutateAsync
const { mutateAsync } = useMutation(add_order);

const myPostFunction = async () => {
  try {
    const result = await mutateAsync(itemsForOrder)
    console.log(result)
  } catch (error) {
    console.error(error);
  }
};

方法2:手动封装Promise(不推荐,仅作补充)

如果因为某些原因必须使用mutate,可以手动将其封装为Promise,利用mutate的回调参数来控制Promise的状态:

const { mutate } = useMutation(add_order);

const myPostFunction = async () => {
  try {
    const result = await new Promise((resolve, reject) => {
      mutate(itemsForOrder, {
        onSuccess: (data) => resolve(data),
        onError: (error) => reject(error)
      });
    });
    console.log(result);
  } catch (error) {
    console.error(error);
  }
};

这种写法本质上是用Promise包裹了mutate的回调逻辑,虽然能实现需求,但不如mutateAsync简洁直观,优先推荐第一种方法。

内容的提问来源于stack exchange,提问作者Nikon George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:29:54