微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么javascript ES6 Promises在解决后会继续执行?

据我所知,promise是可以解决()或拒绝()但我很惊讶发现在调用解析或拒绝后,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具有“run to completion”的概念.除非抛出错误,否则执行函数直到返回语句或其结束.函数外部的其他代码不能干扰它(除非再次抛出错误).

如果您希望resolve()退出初始化函数,则必须通过返回前缀:

return new Promise(function(resolve, reject) {
    return resolve();
    console.log("Not doing more stuff after a return statement");
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐