事件迴圈2(微任務 和巨集任務)

2022-09-20 21:42:20 字數 1375 閱讀 5568

js是單執行緒,一次只能執行乙個任務,當有乙個耗時很長時,有乙個在後面等待,會造成堵塞,非同步的目的就是處理堵塞,提公升效能。

一、promise物件

promise呼叫內部函式。

promise有三種物件:

1.pending:待定,未初始化

2.resolved:非同步成功

3.rejected:非同步操作失敗

promise物件狀態改變:

1.從pending到resolved

2.從pending到rejected

引數 resolve和reject無論哪個值被呼叫,狀態都不可以撤銷,被呼叫後,then方法返回這個被呼叫的值。

console.log("你好");

let a=new promise(function(resolve,reject),1000);

})settimeout(()=>,0)

console.log(45);

//輸出:你好 第乙個物件 45 再見 aha!

二、巨集任務和微任務 

1.巨集任務

可以理解是每次執行棧執行的**就是乙個巨集任務(包括每次從事件佇列中獲取乙個事件**並放到執行棧中執行)。

(macro)task->渲染->(macro)task->...

//完成第乙個巨集任務之後開始渲染,之後再執行下乙個任務

巨集任務包括:

script(整體**)

settimeout

setinterval

i/oui互動事件

postmessage

messagechannel

setimmediate(node.js 環境)

2.微任務

當前 task 執行結束後立即執行的任務。也就是說,在當前task任務後,下乙個task之前,在渲染之前。

微任務包括:

promise.then

object.observe

mutaionobserver

process.nexttick(node.js 環境)

過程:

console.log("1");

new promise(function(resolve,reject)).then(function

());

settimeout(

function

()) console.log(5);

//輸出:1 2 5 3 4

事件迴圈 巨集任務 微任務

在js中我們經常會需要 同時 進行多項工作,例如 定時器 事件 非同步資料互動等,那麼js是如何管理這些任務的,又是如何確定他們的執行順序的?首先,所有的語言都擁有併發模型的概念,也就是說多個任務如何同時執行,大部分語言支援多執行緒執行,js擁有所有語言中最簡單的併發模型 js使用單執行緒的 事件迴...

js 事件迴圈 巨集任務 微任務

console.log 1 settimeout function then function new promise function resolve then function settimeout function then function 先分析 的執行步驟 1 從上向下執行 consol...

微任務,巨集任務,事件迴圈(Event Loop)

最近遇到了事件迴圈的問題,於是決定好好的研究一番。看了一篇文章感覺講的特別好。我們都知道event loop的執行順序是 執行巨集任務 該巨集任務產生的微任務,若微任務執行中產生了新的微任務,則繼續執行微任務,微任務執行完畢,再回到巨集任務進行下一輪迴圈。後來自己也看了很多例子,但是疑惑點是,對於p...