为什么JavaScript ES6 Promise在解决后继续执行?
据我所知,承诺是可以解决()或拒绝()的东西,但我很惊讶地发现承诺中的代码在调用解析或拒绝之后继续执行。
我认为解析或拒绝是退出或返回的异步友好版本,会停止所有立即执行的函数。
有人可以解释为什么下面的例子有时在解析调用后显示console.log:
var call = function() {
return new Promise(function(resolve, reject) {
resolve();
console.log("Doing more stuff, should not be visible after a resolve!");
});
};
call().then(function() {
console.log("resolved");
});
jsbin
JavaScript具有“运行到完成”的概念。 除非抛出错误,否则将执行一个函数,直到return
语句或其结束为止。 函数之外的其他代码不能干扰该操作(除非再次引发错误)。
如果你想resolve()
退出你的初始化函数,你必须通过return
来预先设置它:
return new Promise(function(resolve, reject) {
return resolve();
console.log("Not doing more stuff after a return statement");
});
在resolve
承诺时将调用的回调仍然需要被异步调用。 这是为了确保在同步和异步操作混合使用promise时的一致行为。
因此,当您调用resolve
,回调将排队,并且使用resolve()
调用之后的任何代码立即继续执行函数。
只有JS事件循环被给予回控制,回调才能从队列中移除并实际调用。
链接地址: http://www.djcxy.com/p/55451.html上一篇: Why does javascript ES6 Promises continue execution after a resolve?