关于Promise的pending状态

       var p = Promise.resolve(123);
       var p1 = p.then(function(value){
               console.log("p1")
       });
       var p2 = p1.then(function(value){
               console.log("p2");
       });
       var p3 = p2.then(function(value){
               console.log("p3");
       });
       console.log(p,p1,p2,p3);

打印出来p1,p2,p3都是pending状态,那为什么这些then函数还是会执行?

阅读 18.4k
3 个回答

因为console.log(p,p1,p2,p3);这句代码运行早了,还没改变状态

你把下面代码加上试试

setTimeout(() => {
    console.log(p,p1,p2,p3);
},1000)

Promise.then是异步执行的,js执行了第一句就直接到最后console.log(p,p1,p2,p3);
然后 p1 , p2 , p3 对应的函数才执行。

console.log(p,p1,p2,p3);

应该改为

p3.then(function(value){
   console.log(p,p1,p2,p3);
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题