据我了解,promise是可以resolve()或reject()的东西,但令我惊讶的是,发现promise中的代码在调用了resolve或reject之后仍继续执行。
我认为resolve或reject是exit或return的异步友好版本,它将终止所有立即执行的函数。
有人可以解释为什么下面的示例有时会在resolve调用后显示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");
});
这是一个很好的问题,即使阅读了所有答复,我也不确定最佳实践……
—
Gabriel Glenn
我认为误解是由您到底使用resolve()终止而来的:在您调用resolve()之后,promise已被解决,但是正如其他人已经说过的那样,这并不意味着终止了promise的函数已经终止了它的终止。任务也是如此,因此它将持续到达到“正常”终止为止。
—
朱塞佩·贝通
resolve()
不是一个神奇地具有效果的JS控制语句return
,它只是一个函数调用,是的,执行之后会继续执行。