js Promise问题

js关于Promise问题
问题代码
             let p1 = new Promise((resolve,reject)=>{
                resolve();
            });

            let p2 = p1.then(()=>{
                console.log("哈哈哈哈");
            })

            p2.then(()=>{
                console.log(111111);
            })
  
            // 这里p1状态为 fulfilled
            1. console.log(p1);    
            
            // 这里p2状态为 pending
            1. console.log(p2);

            // 而在定时器中 
            setTimeout(()=>{

                // p1结果没有变化
                console.log(p1);

                // 而 p2的状态改为了 fulfilled 
                console.log(p2);
            })
我想知道p2的一个执行过程,或者说是为什么
我不知道我理解的正不正确,我这里相的是, 因为Promise是异步的, 所以代码先执行了不在定时器当中的打印,也就是标注为1的位置,而p1呢是存在resolve的所以p1的状态为fulfilled,而p2呢所实在的我没有理解到,但是我猜测,因为p2 是p1.then的一个处理结果,而p1.then又返回了个新的promise ,这个新的promise 没有进行任何操作,所以这里p2 的状态为pending。
而这时呢,除了定时器中所有代码都已经执行完成,这回处理定时器中的p1的结果没有发生变化,而p2在上面代码中进行了.then操作,虽说在.then里面什么也没有操作,但是因为 默认then 返回promise状态是fulfied,

所以说在定时器中p2的结果发生了变化

    // p1执行resolve,p1:fulfilled
    let p1 = new Promise((resolve, reject) => {
      resolve();
    });

    // 返回了一个新的promise,p2:pending
    let p2 = p1.then(() => {
      console.log("****3****", "哈哈哈哈");
    });

    // p2执行resolve,p2:fulfilled
    p2.then(() => {
      console.log("****4****", 111111);
    });

    // p1:fulfilled
    console.log("****1****", p1);

    // p2:pending
    console.log("****2****", p2);

    // 而在定时器中
    setTimeout(() => {
      // p1:fulfilled
      console.log("****5****", p1);

      // p2:fulfilled
      console.log("****6****", p2);
    });

与执行顺序有关,先执行Promise和setTimeout外的输出,再执行Promise的输出,最后执行setTimeout里的输出。
promise本身同步的,.then方法是异步的。new Promise是pending, Promise执行resolve会由pending->fulfilled,执行rejected会由pending->rejected,且三种状态不可逆