为什么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?

下一篇: How do I tell if an object is a Promise?