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

为何async函数返回普通值时Promise已解析,返回Promise时却pending?

问题解答

第一个案例的原因

async 函数的核心规则之一:如果返回的是非Promise类型的值,会直接在同步阶段把这个值包装成一个已决议(resolved)的Promise返回。

所以当你调用 fun() 时,函数同步执行到 return 5,立刻生成一个值为5的resolved Promise,此时 console.log 打印的自然是已完成状态的 Promise{5}。

第二个案例的原因

当 async 函数返回的是一个Promise对象时,它不会直接复用这个Promise,而是会通过调用该Promise的then方法来关联自身的状态——这个关联过程是异步的(属于微任务队列)。

哪怕你返回的是 Promise.resolve(5)(一个已经resolved的Promise),async 函数返回的Promise也得等到当前同步代码执行完毕、微任务队列开始处理时,才会完成状态更新。所以在同步执行 console.log(fun()) 的瞬间,这个Promise还处于pending状态,输出就是 Promise{<pending>}。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:42:24