Lud*_*ven 78 javascript promise ecmascript-6 es6-promise
据我所知,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");
});
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 121
JavaScript具有"运行到完成"的概念.除非抛出错误,否则执行函数直到达到return
语句或其结束.函数外部的其他代码不能干扰它(除非再次抛出错误).
如果要resolve()
退出初始化函数,则必须通过return
以下方式添加前缀:
return new Promise(function(resolve, reject) {
return resolve();
console.log("Not doing more stuff after a return statement");
});
Run Code Online (Sandbox Code Playgroud)
Aln*_*tak 19
当规则resolve
仍然需要异步调用时,将在您的promise 时调用的回调.这是为了确保将promises用于混合的同步和异步操作时的一致行为.
因此,当您调用resolve
回调队列时,函数会立即继续执行调用后的任何代码resolve()
.
只有在给予JS事件循环后,才能将回调从队列中删除并实际调用.