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

如何正确获取fetch请求的状态?解决返回Promise而非状态码问题

如何正确获取async函数中fetch请求的状态码

问题原因

所有async函数的返回值都会被自动包装成Promise对象,哪怕你在函数内部return的是原始值(比如这里的201)。所以直接调用Verify(test)得到的不是状态码,而是一个处于pending/fulfilled状态的Promise。

解决方案

要获取Promise内部的实际值,必须通过await(在async上下文内)或者.then()链式调用的方式:

方案1:使用async/await(推荐)

因为React的useEffect回调不能直接是async函数(会导致返回Promise而非清理函数),所以需要在内部定义async函数并执行:

useEffect(() => {
  async function Verify(test) {
    const response = await fetch("/api/test", {
      method: "POST", 
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({test: test}),
    });
    const res = response.status;
    console.log(res); // 输出201
    return res;
  }

  // 单独定义async函数处理await逻辑
  async function handleFetch() {
    const status = await Verify(test);
    console.log(status); // 输出201
    // 这里可以将status存入state或执行其他业务逻辑
  }

  handleFetch();
}, [test]); // 记得添加依赖项test

方案2:使用.then()链式调用

如果不想用async/await,也可以直接通过Promise的.then()方法获取结果:

useEffect(() => {
  function Verify(test) {
    return fetch("/api/test", {
      method: "POST", 
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({test: test}),
    }).then((response) => {
      const res = response.status; 
      console.log(res); // 输出201
      return res;
    });
  }

  Verify(test).then(status => {
    console.log(status); // 输出201
    // 后续业务逻辑处理
  });
}, [test]);

关键注意点

  • 不要直接把async函数作为useEffect的回调,否则React会提示警告(因为期望返回清理函数或undefined)。
  • 确保在useEffect的依赖数组中添加test,避免不必要的重复请求或闭包问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:04:54