我在閱讀an article,它解釋了事件循環和執行時間。其中提到可以有多個任務隊列,事件循環可以從中選擇執行任務。我的主要問題是什麼時候瀏覽器決定創建一個新隊列?我試圖觀察這種情況,但到目前爲止還沒有做到。如何觀察JS事件循環中的多個任務隊列
與this other article相比,關於這個問題,沒有提到多個隊列,所以我要麼誤解某些東西,要麼其中一個文章在某處不正確。
我在閱讀an article,它解釋了事件循環和執行時間。其中提到可以有多個任務隊列,事件循環可以從中選擇執行任務。我的主要問題是什麼時候瀏覽器決定創建一個新隊列?我試圖觀察這種情況,但到目前爲止還沒有做到。如何觀察JS事件循環中的多個任務隊列
與this other article相比,關於這個問題,沒有提到多個隊列,所以我要麼誤解某些東西,要麼其中一個文章在某處不正確。
我相信這兩篇文章只是使用不同的術語。
在物品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解決了之間的隊尾和開始下一個隊列控制檯日誌,我們可以得出結論說我們正在觀察不同的事件隊列。
事件循環不是JavaScript(ECMAScript)標準的一部分,並且是特定於實現的。我不相信你可以通過JavaScript觀察它。 –