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

使用async/await时Promise未解析:为何返回Promise而非实际数据

为什么async函数返回Promise而不是实际数据?

嘿,这个问题其实是async函数的核心特性之一,咱们一步步来理清楚~

首先,所有async函数的返回值都会被自动包装成一个Promise对象,哪怕你return的是普通值或者已解析的Promise,它都会帮你再包一层。所以你直接console.log(fetchData())的时候,打印的肯定是这个还没完成的Promise,而不是里面的data。

要拿到你期望的[{userId: 1, name: 'ss'}]这类实际数据,你有几种常见的解决方案:

方案1:使用.then()链式调用处理Promise

var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
  const response = await fetch(a);
  const data = await response.json();
  return data;
}

// 通过.then()获取Promise resolved后的结果
fetchData().then(data => {
  console.log(data);
});

方案2:在另一个async函数中使用await调用

var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
  const response = await fetch(a);
  const data = await response.json();
  return data;
}

// 定义一个新的async函数来执行await操作
async function logFetchedData() {
  const result = await fetchData();
  console.log(result);
}

logFetchedData();

方案3:使用立即执行的async函数表达式

如果你不想额外定义函数,可以用这种更简洁的写法:

var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
  const response = await fetch(a);
  const data = await response.json();
  return data;
}

// 立即执行的async匿名函数
(async () => {
  const result = await fetchData();
  console.log(result);
})();

关键提醒

await关键字只能在async函数内部使用,所以你不能直接在全局作用域写const result = await fetchData(),必须把它包裹在async函数里,或者用.then()来处理Promise的异步结果。这样就能拿到你想要的实际数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:58:19