主要是“promise2”和“async1 end”的顺序。我不知道为什么。
async function async2() {
console.log("async2");
}
new Promise(resolve => {
resolve(async2());
}).then(() => {
console.log("async1 end");
});
new Promise(function(resolve) {
console.log("promise1");
resolve();
}).then(function() {
console.log("promise2");
});
最佳答案
resolve(async2());
与以下内容大致相同:
resolve(Promise.resolve())
因此它创建了一个将解决的 Promise,并将其传递给另一个 Promise 的解决方案。随着 Promise 变得扁平化(用 Promise 解决 Promise,将使外部 Promise 等待内部 Promise),您的示例可以简化为:
Promise.resolve("first").then(console.log);
Promise.resolve("second")
.then(it => it)
.then(console.log);
现在保证 Promise 的解析是异步的,因此即使您像您的情况一样同步解析它,.then
回调也只会在 1 个刻度后调用。现在,第一个将在一个刻度后记录,第二个也将在一个刻度后解析,然后链式 Promise 将解析,然后等待另一个刻度,直到第三个刻度完成。
因此“promise2”将在一个tick后被记录,“async1 end”将在两个tick后被记录。
<小时/>尽管如此,您不应该依赖 promise 的执行顺序。
关于javascript - 下面代码的执行顺序以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55279380/