为了账号安全,请及时绑定邮箱和手机立即绑定

resolve()的传值问题?

resolve()的传值问题?

蛊毒传说 2018-12-18 21:15:49
在你不知道的js里有这样一句话:如果传给resolve()的是一个非Promise,非thenable的立即值,这个promise就会立即用这个值完成,否则这个这个值会被递归的展开。首先这里的立即值就不太明白了?汇编?promise就会立即用这个值完成,这句话什么意思,是promise成功了的意思吗?否则这个这个值会被递归的展开??wtf...Promise,thenable的立即值被递归展开?
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

1.立即值这个说法倒是头一次听说,意思应该是对应thenable对象,立即值就是非thenable对象或者原始值,最起码在这句话是是这个意思


2.立即用这个值完成,Promise对象一被创建就会立即执行,也就是楼上说的第一个例子,如果resolve一个非thenable对象,Promise的状态就会立即变成resolved,然后在本轮事件轮询结束调用回调,这个立即完成其实是对应于resolve一个thenabel对象来说的,也就是你的第三个问题


//问题2简单示例

setTimeout(() => console.log('setTimeout'),0);

var p =new Promise(resolve => {console.log('new Promise');resolve('Promise_resolve');})

console.log(p)

p.then(v => console.log(v));

console.log('console.log');

3.楼上对于这个问题提的例子是不准确的,应该是resolve(new Promise()),而不是return new Promise(),return new Promise()并不会改变Promise的状态


关于递归展开,如果resolve传递的一个Promise对象或者thenable对象,那么他不会立即resolved,而是会等待参数的状态来决定(前提是不resolve自身,否则会立即rejected),至于参数的状态如何决定最终状态,有点复杂,可以参考Promise/A+规范


查看完整回答
反对 回复 2019-01-11
  • 1 回答
  • 0 关注
  • 551 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信