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

Async/await行为疑问:为何调用async函数返回Promise {<pending>}?

为什么调用async函数会输出Promise {}?

这事儿其实很好理解,核心就在于async函数的本质和你两种调用方式的区别:

1. async函数的返回值永远是Promise对象

不管你在async函数里return了什么值,JavaScript都会自动把这个值包装成一个Promise实例返回给你。当你直接执行console.log(data1())时,data1刚执行到await server.fetch(...)这一步——它还在等着服务器返回结果呢,此时这个Promise还处于**pending(等待)**状态,所以控制台就会输出Promise {<pending>}。

2. 两种写法的核心差异

  • 第一种写法里,你只是让async函数返回了一个未完成的Promise,却没有等待它完成就直接打印了。这就像你刚下单点了外卖,还没等骑手送到就去看餐盒,那肯定是“待送达”状态呀。
  • 第二种写法里,你在async函数内部用await等待了server.fetch的Promise完成,拿到最终的res之后才打印,所以自然能看到响应结果。

如果你想在第一种写法里拿到结果怎么办?

要是你想保留data1返回结果的逻辑,又要打印出最终值,有两种常用方式:

方式一:用.then()处理Promise

const data1 = async () => { 
  const res = await server.fetch({ query: LISTINGS }); 
  return res; 
};
data1().then(res => console.log(res));

方式二:在另一个async函数里用await

const data1 = async () => { 
  const res = await server.fetch({ query: LISTINGS }); 
  return res; 
};
// 立即执行的async函数
(async () => {
  const finalRes = await data1();
  console.log(finalRes);
})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:27:56