一、规则

js的执行机制是单线程的。

javascript.png

new Promise((resolve,reject)=>{

相当于函数调用,直接当作同步任务走

})

  1. for (var i = 0; i < 10; i++) {
  2. setTimeout(() => {
  3. console.log(i);
  4. }, 0);
  5. }
  6. //for 循环时同步任务直接去执行了
  7. // 遇到宏任务不执行,放入宏任务队列
  8. // set1,set2,set3...set10
  9. // i<9 i++ i是10
  10. //没有微任务 执行宏任务,宏任务的i是10了所以打印出来的是10
  11. console.log("end", i);
  12. //结论: 先打印 'end 10' 10个10
  1. setInterval(() => {
  2. console.log(1);
  3. }, 1000);宏任务
  4. new Promise((resolve, reject) => {
  5. console.log(2);//同步任务 1
  6. resolve(3);//异步任务1
  7. }).then(res => {
  8. console.log(res);
  9. });
  10. console.log(5); 同步任务2
  11. //2531
  12. 先执行所有的同步任务,然后是微任务,最后是宏任务
  1. new Promise(resolve => {
  2. console.log(6); //1
  3. resolve();
  4. }).then(res => {
  5. console.log(7);//第一次存放微任务队列
  6. });
  7. async function first() {
  8. console.log(1);//3
  9. await second();
  10. console.log(2);//第二次存放微任务队列
  11. }
  12. setTimeout(() => {
  13. console.log(4);//宏任务最后执行
  14. });
  15. console.log(5);//2
  16. first();
  17. console.log(8);//同步任务
  18. async function second() {
  19. console.log(3);//4
  20. }
  21. //65138724
  22. 总结:new Promise()相当于同步,先执行 同步任务执行完以后