Title

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`)
    } //-->console 1;console 13;console 2;console 3;console 4;console 6;console 10;console 11;console 12;console 7;console 8;console 9

 

简单小结:在一个函数中执行顺序-->已申明的函数-->new Promise-->setTimeout;在Promise函数中后执行.then()函数;

posted @ 2021-06-18 10:06  谈亦行  阅读(854)  评论(0编辑  收藏  举报