下面代码的执行顺序,为什么?

时间:2019-03-21 11:24:59

标签: javascript promise

主要是“ 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");
});

1 个答案:

答案 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的执行顺序。