ECMAScript中已决议Promise[[PromiseResult]]匹配入参对象的规范位置查询
对应规范位置说明
你所问的「传入不带then属性的普通对象」场景,对应你给出的resolve函数执行流程的第9步~第12步a分支,我们可以结合你的两个示例对应走一遍流程:
第一个示例(传入字符串"hello")
入参是原始类型,非Object类型,走到第8步时直接触发8a分支FulfillPromise(promise, resolution),用原始值兑现Promise,流程结束。
第二个示例(传入普通对象{a: 100})
入参是Object类型,不会触发第8步分支,后续执行流程如下:
- 执行第9步:对
{a: 100}执行Get操作取then属性,因为该对象自身和原型链上都没有then属性,Get操作返回正常完成记录,值为undefined - 执行第10步:Get操作不是突发完成,不触发 reject 分支
- 执行第11步:拿到thenAction的值为
undefined - 执行第12步:判断
IsCallable(undefined)结果为false,触发12a分支FulfillPromise(promise, resolution),直接用该普通对象兑现Promise,不会走后续的thenable异步处理逻辑。
内容的提问来源于stack exchange,提问作者MaximPro
相关产品推荐
相关产品推荐

