Promise 学习3

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

再看第三段代码

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

这段代码的差异,就是内部的 Promise 的代码的写法变了,不再是链式调用。

这里怎么理解呢?

这里在执行内部的 new Promise 的 resolve 执行完成之后(扭转了该 Promise 的状态),new Promise 之后的两个同步 p.then 是两个执行代码语句,都是同步执行,自然是会同步注册完。

两种方式的最主要的区别是:

所以这里的代码执行就比较清晰了,内部都执行完成之后(因为都优先于外部的第二个 then 的注册),再执行外部的第二个 then :

output:

外部promise  
外部第一个then  
内部promise  
内部第一个then  
内部第二个then  
外部第二个then
上一篇下一篇

猜你喜欢

热点阅读