1,什么是宏任務和微任務?它們的執行順序是什么?為什么需要微任務?
常見宏任務包括(整塊代碼,setTimeout),常見微任務包括(promise);
setTimeout(()=>{console.log('我是宏任務')},0);
let promise = new Promise(resolve => {resolve();console.log('新建promise')});
promise.then(value =>{console.log('我是微任務')});
console.log('主流程');
一是定時器對應的任務為宏任務,promise物件的then方法創建的任務為微任務
二是執行順序首先執行promise物件初始化中的方法,它和主流程的方法一樣先執行,然后執行微任務,最后執行宏任務,即使定時器的時間為0也是如此,以上代碼的執行結果為
新建promise
主流程
我是微任務
我是宏任務
代碼中的resolve();把promise物件的狀態改為成功,于是當主流程執行完畢后會執行微任務中的成功方法
三是宏任務是按順序執行的,微任務的出現是為了提高代碼執行的優先級
四是遇到asnyc函式直接執行里面的代碼,遇到await相當于new Promise(()=>{ }),也是直接執行 ,但是await之后的代碼相當于new Promise(()=>{ })后面的.then,需要放到微任務佇列里
任務分為同步任務和異步任務,其中異步任務包括宏任務(settimeout,setinterval)和微任務(promise,async await),其中有個特殊的宏任務就是,整個代碼塊是一個宏任務(而不是每行代碼都是一個宏任務);首先執行整個代碼塊的這個宏任務,然后清空微任務佇列,然后執行一個宏任務,然后再清空微任務佇列,如此回圈,直到所有代碼執行完畢
需要注意的點:
1,new promise直接執行
2,await相當于new promise,其后面的代碼相當于,then
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/286450.html
標籤:區塊鏈
上一篇:兩個nil比較結果是什么
下一篇:嵌入式除錯GDB使用
