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

为什么我的async函数没有隐式返回Promise反而返回undefined?

问题原因解答

你提到的async函数返回规则本身是正确的:

Async函数始终会返回一个Promise。如果没有显式返回Promise,你返回的值会自动被包装在Promise中。

getData2()返回undefined的核心原因和async规则无关,是你混淆了两个函数的返回值:

  • 你写在setTimeout回调里的return,是setTimeout回调函数的返回值,和外层的getData2没有任何关联
  • getData2本身的函数体只有一行setTimeout调用,没有给自身写return语句,默认返回undefined

执行逻辑可以拆解为:

  1. 调用getData2后,同步执行setTimeout,将1秒后执行的回调推入异步队列
  2. setTimeout执行完成后,getData2没有其他代码,默认返回undefined
  3. 按照async函数的规则,这个undefined会被自动包装为状态为fulfilled的Promise
  4. await getData2()直接拿到这个Promise的结果undefined输出,1秒后setTimeout的回调才会执行,此时回调的返回值没有被任何变量接收,完全不会影响之前的执行结果

对比getData的逻辑:
getData显式返回了一个自定义Promise,await会等待这个Promise调用resolve之后才会拿到结果,因此能正常输出异步拿到的值。

修正后的getData2写法

如果要让getData2正常返回异步结果,需要把setTimeout包装成Promise后返回:

const getData2 = async() => {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('this is the data without an explicit promise');
    }, 1000);
  });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:57:00