【发布时间】:2018-03-10 23:12:34
【问题描述】:
为什么在我的 Promise 之后调用的函数在 Promise 的回调之前执行?
我在 MDN 上看过这个,但没看懂
"回调将永远不会在当前完成之前被调用 JavaScript 事件循环的运行。”
我认为这意味着如果我在resolve() 或reject() 之后有任何其他语句,它们将在调用回调之前执行。不过,这似乎是一个不完整的理解。
function myFunction() {
return new Promise( function(resolve, reject) {
const err = false;
if(err) {
reject("Something went wrong!!!");
}
else {
resolve("All good");
}
});
}
myFunction().then(doSuccess).catch(doError);
doOther();
function doError(err) {
console.log(err);
}
function doSuccess() {
console.log('Success');
}
function doOther() {
console.log("My Other Function");
}
输出:
我的其他功能
成功
【问题讨论】:
-
这正是你所观察到的;
doOther在当前运行中执行,因此回调将永远在它之前被调用。 -
您的问题适用于 promise
.then()回调,而不是一般的回调。有很多回调是同步调用的,比如你传递给array.filter()的回调。
标签: javascript promise