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

例如:
varpromise=newPromise(function(resolve,reject){
setTimeout(function(){
resolve(1);
console.log(2);
},1000);
console.log(3);
});
promise.then(function(data){
console.log(data);
});
我觉得应该结果是
3
1
2
可是结果却是
3
2
1
请问这是为什么?我觉得当promise执行到reject的时候,会自动跳转到then的函数中去,难道es6中的Promise不会打断函数的执行?
子衿沉夜
浏览 773回答 2
2回答

达令说

这里resolve(1);console.log(2);类似setTimeout(function(data){console.log(data);},0);console.log(2);resolve的调用是一个类似异步的过程

慕莱坞森

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

相关分类

JavaScript