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

如何提升异步调用代码可读性?Promise写法优化咨询

优化方案说明

你的期望写法思路是对的,核心问题在于fetchData()是异步函数,调用后返回的是Promise对象,直接console.log无法拿到实际返回的response.data,需要正确处理这个异步结果。以下是修正后的可运行代码:

修正后的完整代码

// 简化apiCall,直接返回axios的Promise即可,无需额外async/await
const apiCall = () => {
  return axios.get("URL");
}

const fetchData = async() => {
  const response = await apiCall();
  return response.data;
}

// 处理异步结果的两种方式:
// 方式1:用立即执行的异步函数包裹,内部await获取结果后打印
(async () => {
  const data = await fetchData();
  console.log(data);
})();

// 方式2:用.then()处理(如果偏好这种写法)
// fetchData().then(data => console.log(data));

关键修正点

  • apiCall可简化:axios.get本身就返回Promise,不需要额外包裹async函数,直接返回这个Promise即可,和你期望的写法一致。
  • 必须正确处理异步结果:async函数的返回值是Promise,不能直接console.log(fetchData()),否则会输出Promise { <pending> }。可以用立即执行的异步函数表达式包裹,内部用await拿到结果后再打印,或者继续用.then()处理。

原期望代码无法运行的原因

当执行console.log(fetchData())时,fetchData作为异步函数会立刻返回一个处于pending状态的Promise,此时网络请求还未完成,所以打印的是Promise对象而非实际数据。必须等待Promise状态变为resolved后,才能获取到里面的response.data。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:15:02