为何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
相关产品推荐
相关产品推荐

