主要是“ 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");
});
答案 0 :(得分:1)
resolve(async2());
简短地与以下内容相同:
resolve(Promise.resolve())
因此,它创建了一个将解决的Promise,并将其传递给另一个Promise的解决方案。随着Promises变得扁平化(用一个Promise解决一个Promise,会使外部Promise等待内部),您的示例可以简化为:
Promise.resolve("first").then(console.log);
Promise.resolve("second")
.then(it => it)
.then(console.log);
现在保证解决一个Promise可以保证是异步的,因此,即使像您的情况一样同步解决它,.then
回调也只会在1个滴答之后被调用。现在,第一个在打勾后将记录下来,第二个在打勾后也将解决,然后链接的Promise会解决,这将等待另一个打勾,直到第三个完成。
因此,一分钟后将记录“ promise2”,两秒后将记录“ async1 end”。
尽管如此,您不应该依赖promise的执行顺序。