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

es6中Promise在执行到resolve的时候会打断当前运行的函数么?

es6中Promise在执行到resolve的时候会打断当前运行的函数么?

子衿沉夜 2019-04-13 08:36:38
例如:varpromise=newPromise(function(resolve,reject){setTimeout(function(){resolve(1);console.log(2);},1000);console.log(3);});promise.then(function(data){console.log(data);});我觉得应该结果是312可是结果却是321请问这是为什么?我觉得当promise执行到reject的时候,会自动跳转到then的函数中去,难道es6中的Promise不会打断函数的执行?
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

这里
resolve(1);
console.log(2);
类似
setTimeout(function(data){
console.log(data);
},0);
console.log(2);
resolve的调用是一个类似异步的过程
                            
查看完整回答
反对 回复 2019-04-13
?
慕莱坞森

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

调用resolve或reject实际上是改变当前Promise实例的状态(pending->fulfilled,或pending-rejected),并附带传给Promise实例一个state值而已,并不是要执行其他处理。
而我们通过then来订阅Promise实例的状态变化,而这个状态变化的事件通知有3个特点:
1.异步触发:就是状态变化后不会马上执行事件响应函数,而是等待当前任务队列为空时才执行;
2.仅触发一次:由于Promise实例的状态变化是单向不可逆,因此同一个事件响应函数仅能被执行一次;
3.延迟绑定:虽然我们订阅的是状态变化事件,但即使实例的状态已经为fulfilled或rejected,我们才订阅事件,依然可以得到触发。
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 772 浏览
慕课专栏
更多

添加回答

举报

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