JavaScript中Promise函數執行順序


Promise的執行順序記錄:

前言:Javascript執行環境是單線程的,也就是說JS環境中負責解釋和執行的線程只有一個;那么Promise函數在JavaScript中執行時的順序(紙上得來終覺淺)!

D級:

testFunction() {
      console.log(`console 1`);
      new Promise((resolve, reject) => {
          console.log(`console 2`);
          resolve(console.log(`console 3`));
          reject(console.log(`console 4`))
      }).then().catch(() => {
          console.log(`consolve 5`)
      });
      console.log(`console 6`)
    }   //-->運行結果是 console 1;console 2;console 3;console 4;console 6

 

C級:

testFunction() {
      console.log(`console 1`);
      new Promise((resolve, reject) => {
          console.log(`console 2`);
          resolve(console.log(`console 3`));
          reject(console.log(`console 4`))
      }).then(() => {
          setTimeout(() => {
              console.log(`console 7`)
          },0)
      }).catch(() => {
          console.log(`consolve 5`)
      });
      console.log(`console 6`)
    } // -->console 1;console 2;console 3;console 4;console 6;console 7

 

B級:

testFunction() {
      console.log(`console 1`);
      new Promise((resolve, reject) => {
          console.log(`console 2`);
          resolve(console.log(`console 3`));
          reject(console.log(`console 4`))
      }).then(() => {
          setTimeout(() => {
              console.log(`console 7`);
              new Promise(() => {
                  console.log(`console 8`)
              }).then(console.log(`console 9`))
          },0)
      }).catch(() => {
          console.log(`consolve 5`)
      });
      console.log(`console 6`)
    } // -->console 1;console 2;console 3;console 4;console 6;console 7;console 8;console 9

 

A級:

testFunction() {
      console.log(`console 1`);
      setTimeout(() => {
          new Promise(() => {
              console.log(`console 10`);
          }).then(console.log(`console 11`));
      },0);
      new Promise((resolve, reject) => {
          console.log(`console 2`);
          resolve(console.log(`console 3`));
          reject(console.log(`console 4`))
      }).then(() => {
          setTimeout(() => {
              console.log(`console 7`);
              new Promise(() => {
                  console.log(`console 8`)
              }).then(console.log(`console 9`))
          },0)
      }).catch(() => {
          console.log(`consolve 5`)
      });
      console.log(`console 6`)
    }//-->console 1;console 2;console 3;console 4;console 6;console 10;console 11;console 7;console 8;console 9

 

S級:

testFunction() {
      console.log(`console 1`);
      setTimeout(() => {
          new Promise(() => {
              console.log(`console 10`);
          }).then(console.log(`console 11`));
      },0);
      let letP =new Promise(() => {
          setTimeout(() => {
              console.log(`console 12`);
          },0)
      });
      promiseFn(letP);
      function promiseFn(fn){
        console.log(`console 13`)
        return fn;
      };
      new Promise((resolve, reject) => {
          console.log(`console 2`);
          resolve(console.log(`console 3`));
          reject(console.log(`console 4`))
      }).then(() => {
          setTimeout(() => {
              console.log(`console 7`);
              new Promise(() => {
                  console.log(`console 8`)
              }).then(console.log(`console 9`))
          },0)
      }).catch(() => {
          console.log(`consolve 5`)
      });
      console.log(`console 6`)
    } //-->consolve 1;consolve 13;consolve 2;consolve 3;consolve 4;consolve 6;consolve 10;consolve 11;consolve 12;consolve 7;consolve 8;consolve 9

 

簡單小結:在一個函數中執行順序-->已申明的函數-->new Promise-->setTimeout;在Promise函數中后執行.then()函數;


免責聲明!

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



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