2017-07-28 33 views
0

我在閱讀an article,它解釋了事件循環和執行時間。其中提到可以有多個任務隊列,事件循環可以從中選擇執行任務。我的主要問題是什麼時候瀏覽器決定創建一個新隊列?我試圖觀察這種情況,但到目前爲止還沒有做到。如何觀察JS事件循環中的多個任務隊列

this other article相比,關於這個問題,沒有提到多個隊列,所以我要麼誤解某些東西,要麼其中一個文章在某處不正確。

+0

事件循環不是JavaScript(ECMAScript)標準的一部分,並且是特定於實現的。我不相信你可以通過JavaScript觀察它。 –

回答

0

我相信這兩篇文章只是使用不同的術語。

在物品1:

事件循環具有保證源內的執行順序的多個任務源...

在第2條

事件循環可以有多個任務隊列......任務必須按ev中的插入順序進行處理隊列。

回答我自己的觀察左右不同的隊列中的問題,我認爲這是如此簡單:

function foo() { 
    console.log('Start of queue'); 
    bar(); 
    Promise.resolve().then(function() { 
    console.log('Promise resolved'); 
    }); 
    console.log('End of queue'); 
} 

function bar() { 
    setTimeout(function() { 
    console.log('Start of next queue'); 
    console.log('End of next queue'); 
    }, 0); 
} 

foo(); 
//-> Start of queue 
//-> End of queue 
//-> Promise resolved 
//-> Start of next queue 
//-> End of next queue 

第一任務隊列(或任務源)爲foo()foo()調用bar()bar()調用setTimeout(),其建立了新的任務隊列(或任務源)。我們可以觀察到每個任務隊列的方式是解析Promise。將Promise回調插入微隊列。所有微隊列任務在每個任務隊列末尾執行(或任務源)。因爲我們看到Promise解決了之間的隊尾開始下一個隊列控制檯日誌,我們可以得出結論說我們正在觀察不同的事件隊列。

相關問題