例如:
var promise = new Promise(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不会打断函数的执行?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这里
类似
resolve 的调用是一个类似异步的过程
调用resolve或reject实际上是改变当前Promise实例的状态(pending->fulfilled,或pending-rejected),并附带传给Promise实例一个state值而已,并不是要执行其他处理。
而我们通过then来订阅Promise实例的状态变化,而这个状态变化的事件通知有3个特点:
1. 异步触发:就是状态变化后不会马上执行事件响应函数,而是等待当前任务队列为空时才执行;
2. 仅触发一次:由于Promise实例的状态变化是单向不可逆,因此同一个事件响应函数仅能被执行一次;
3. 延迟绑定:虽然我们订阅的是状态变化事件,但即使实例的状态已经为fulfilled或rejected,我们才订阅事件,依然可以得到触发。
根据规范
调用resolve的时候并没有执行thenAction,而是在第12行调用 EnqueueJob将任务加入执行队列中。
打断的,你可以用这个以下这个,就自动会到catch啦
https://promisesaplus.com/#point-34
https://promisesaplus.com/#point-67