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

2022-09-15 01:33:13 字數 1879 閱讀 6907

最近遇到了事件迴圈的問題,於是決定好好的研究一番。看了一篇文章感覺講的特別好。

我們都知道event loop的執行順序是:

執行巨集任務-->該巨集任務產生的微任務,若微任務執行中產生了新的微任務,則繼續執行微任務,微任務執行完畢,再回到巨集任務進行下一輪迴圈。

後來自己也看了很多例子,但是疑惑點是,對於promise的then的微任務的微任務執行順序是怎麼樣呢?

new promise((resolve, reject) =>).then(() =>).then(() =>);

}).then(() =>)

輸出結果是:1,2,3,4,5。答對了嗎?

那我們來分析一下,是如何執行的呢:

首先,遇到promise例項(標記為p1),執行該建構函式中的同步**,立即執行,列印出:1;

接著,又遇到了promise例項(標記為p2),列印出:2;

接著,p2的then為微任務,存入到微任務佇列(入棧);------這裡是指then後的一大坨。

接著,繼續執行p1,p1的then也是微任務,存入到微任務佇列(入棧);

好了,現在沒有同步任務了,那我們開始對微任務佇列動手了!!o(∩_∩)o

首先進去的是p2的微任務,那我們執行p2的then,列印出3;

接著,p2的後邊還有then,繼續存入微任務佇列(入棧);

現在微任務佇列執行到p1的then了,列印出4;

最後,就只剩下p1的第二個then了,繼續執行,列印出5。

好啦!大家學廢了嗎?這裡是我對promise的微任務的一些理解。接下來在看乙個

事件迴圈 巨集任務 微任務

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

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

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

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

js是單執行緒,一次只能執行乙個任務,當有乙個耗時很長時,有乙個在後面等待,會造成堵塞,非同步的目的就是處理堵塞,提公升效能。一 promise物件 promise呼叫內部函式。promise有三種物件 1.pending 待定,未初始化 2.resolved 非同步成功 3.rejected 非同...