Promise執行順序機制


   //promise執行順序
      const first = () =>
        new Promise((resolve, reject) => {
                console.log(1);//1
                let p = new Promise((resolve, reject) => {
                        console.log(2);//2
                        setTimeout(() => {
                         console.log(6);//6
                         resolve(7) //7
                        }, 0);
                        resolve(4);
                     });
                resolve(5);
                p.then(arg => {
                    console.log('p.then'+arg);//4
                });
        });

      first().then(arg => {
        console.log('first.then'+arg);//5
      });
      console.log(3);//3
//這道題主要理解js執行機制。執行順序123456

// 第一輪事件循環,先執行宏任務,主script,new Promise立即執行,輸出 1,執行p這個new Promise操作,輸出 2,發現setTimeout,將回調函數放入下一輪任務隊列(Event Quene),p的then,暫且命名為then1,放入微任務隊列,且first也有then,命名為then2,放入微任務隊列。執行console.log(3),輸出 3,宏任務執行結束。

// 再執行微任務,執行then1,輸出 4,執行then2,輸出 5。

// 第一輪事件循環結束,開始執行第二輪。第二輪事件循環先執行宏任務里面的,也就是setTimeout的回調,輸出 6。resolve(7)不會生效,因為p的Promise狀態一旦改變就不會再變化了。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM