前端急速解決非同步之微任務和巨集任務

2021-09-24 08:31:55 字數 988 閱讀 3278

首先看下列**的執行結果

console.log(1)

process.nexttick(function

())settimeout(function

())})

promise.resolve().then(function

() ).then(function

() );複製**

同步任務、微任務、巨集任務的執行優先順序如下:

同步任務 > 微任務 > 巨集任務複製**

#瀏覽器

node

i/o

settimeout

setinterval

setimmediate

requestanimationframe✅❌#

瀏覽器node

process.nexttick

mutationobserver

promise.then catch finally

✅ 回到題裡面

1、第一行是同步任務,優先順序最高,所以第一次輸出1

2、後面有nexttick,是微任務,有promise是微任務,settimeout是巨集任務,所以settimeouut裡的**最後執行

3、那就先依次執行微任務nexttick列印了2

4、接著執行另乙個微任務promise,列印了5,6

5、接著執行巨集任務settimeout,列印3

6、settimeout裡面有乙個微任務,然後執行它,列印4複製**

// 所以結果就是12

5634

複製**

非同步解決之Generator

generator 1 生成方式 function fn1 fn1.next 使用傳遞引數 fn1.next name qiang 這個引數上傳給上乙個yiel關鍵字的返回值。實戰!function initdata let gen initdata gen.next value.then res ...

JS非同步之巨集佇列與微佇列

js 中用來儲存待執行 函式的佇列包含 2 個不同特定的列隊 js 執行時會區別這 2 個佇列 下面這個例子可以看出promise要先於settimeout執行 settimeout 0 settimeout 0 promise.resolve 1 then value 0 promise.reso...

輝太郎看前端 js非同步巨集任務和微任務

前言巨集任務 settimeout,setinterval,ajax,dom事件 微任務 promise,async await。優先順序 微任務執行要比巨集任務要早。注 同步任務會和微任務按照出場順序先後執行,最後執行巨集任務。同步和非同步console.log 123 alert 阻塞 cons...