Promise 学习4

2022-03-30  本文已影响0人  老米拉

第四段代码

let p = new Promise((resolve, reject) => {
  console.log("外部promise");
  resolve();
})
p.then(() => {
    console.log("外部第一个then");
    new Promise((resolve, reject) => {
      console.log("内部promise");
      resolve();
    })
      .then(() => {
        console.log("内部第一个then");
      })
      .then(() => {
        console.log("内部第二个then");
      });
  })
p.then(() => {
    console.log("外部第二个then");
  });

这段代码中,外部的注册采用了非链式调用的写法,根据上面的讲解,我们知道了外部代码的 p.then 是并列同步注册的。所以代码在内部的 new Promise 执行完,p.then 就都同步注册完了。

内部的第一个 then 注册之后,就开始执行外部的第二个 then 了(外部的第二个 then 和 外部的第一个 then 都是同步注册完了)。然后再依次执行内部的第一个 then ,内部的第二个 then。

output:

外部promise  
外部第一个then  
内部promise  
外部第二个then  
内部第一个then  
内部第二个then

我相信,如果能看懂上面的四段代码之后,对 Promise 的执行和注册非常了解了。

如果还是不太懂,麻烦多看几遍,相信你一定能懂~~~~~~~~
核心思想:

Promise 的 then 的 注册微任务队列 和 执行 是分离的。
注册 : 是完全遵循 JS 和 Promise 的代码的执行过程。
执行 : 先 同步,再 微任务 ,再 宏观任务。

只有分开理解上述,才能真正理解它们的执行顺序~~~~~~~~~~~~~~~~

上一篇下一篇

猜你喜欢

热点阅读