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

异步handleClick函数报错及useMutation返回值异常问题咨询

问题排查与解决方案

问题1:Mutation执行后console.log输出(undefined, false, undefined)

原因

调用createT09ScreenShot后立刻执行console.log,但createT09ScreenShot是异步操作,此时Mutation尚未完成,useMutation返回的data/loading/error仍为初始状态值。另外,loading仅在Mutation执行过程中短暂为true,你在调用后立即打印时,可能已跳过该阶段,但data还未完成更新。

修复方案

有两种方式获取Mutation执行结果:

  1. await Mutation调用并直接处理返回值
    createT09ScreenShot本身返回Promise,可通过await直接拿到执行结果:
const handleClick = async () => {
  const screenshotData = await saveImage();
  if (screenshotData) {
    const { display_1, display_2 } = screenshotData;
    // await Mutation调用,获取结果
    const result = await createT09ScreenShot({
      variables: {
        screenshot_window_1: display_1,
        screenshot_window_2: display_2,
      },
    });
    console.log(result.data, result.loading, result.error);
  }
};
  1. 监听useMutation返回的状态变化
    useMutation的data/loading/error是React状态,会随Mutation执行自动更新。可通过useEffect监听这些状态的变化:
const SaveLogsButton = () => {
  const [createT09ScreenShot, { loading, error, data }] = useMutation(CREATE_T09_SCREENSHOT);

  useEffect(() => {
    // 当data或error有值时打印
    if (data || error) {
      console.log(data, loading, error);
    }
  }, [data, loading, error]);

  const handleClick = async () => {
    const screenshotData = await saveImage();
    if (screenshotData) {
      const { display_1, display_2 } = screenshotData;
      createT09ScreenShot({
        variables: {
          screenshot_window_1: display_1,
          screenshot_window_2: display_2,
        },
      });
    }
  };

  // 组件渲染逻辑...
};

问题2:解构saveImage时报错TypeError: Right side of assignment cannot be destructured

原因

代码const { display_1, display_2 } = saveImage;是直接解构saveImage函数本身,而非它的执行返回值。函数本身不具备可解构的display_1/display_2属性,因此触发报错。

修复方案

需先调用saveImage并await其返回值,再进行解构操作:

const handleClick = async () => {
  // 调用函数并等待返回结果
  const screenshotData = await saveImage();
  // 确保返回值有效后再解构
  if (screenshotData) {
    const { display_1, display_2 } = screenshotData;
    createT09ScreenShot({
      variables: {
        screenshot_window_1: display_1,
        screenshot_window_2: display_2,
      },
    });
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:55:28