JSの学習、イベントキューは、高頻度語が表示されている必要があり、メインスレッド+イベントキューは、その主要な機能の1つです。
古い知識の最近のレビューでは、マイクロタスク間のこの概念は、ここでは、レコードの下で、最初のインタビューのこのタイプに基づいてデモを書きました:
setTimeout(関数(){ にconsole.log(' 5 ' ); }); 新しいプロミス(関数(解決){ にconsole.log(' 1 ' ); // のsetTimeout(解決); 解決() }) .then(関数(){ のsetTimeout(() => { にconsole.log(' 6 ' ); }); 戻り ' 4 ' ; }) .then(にconsole.log)。 process.nextTick(() => { にconsole.log(' 3 ' )。 })。 console.log(' 2 ')。
約束は、同様のクラスを記述する前に、その機能が実現されるが、それはブラウザのパフォーマンスには現実的ではない、キュー機能にプッシュするのsetTimeoutとの直接の関数を受け、単にprocess.nextTickを使用するいくつかのサイトがありますブラウザはもはや適用されるように、達成することがありません。
文書によるとマイクロブラウザのタスクキューがある見つけることができるタスクがトリガされる前にキューで、およそ約束具体的な非同期メソッドはMDN文書で実装されているものを、そのようなことのノードの下setImmediate環境として理解することができ、非常に明確であると言います。
JavaScriptの 約束 と 変異オブザーバーAPI の両方が彼らのコールバックを実行するためにマイクロタスクキューを使用します。
Googleのブラウザコンソールの新しいバージョンを開き、queueMicroTaskを入力ウィンドウ環境で見つけることができる受信機機能として、このような非同期で実行する機能とprocess.nextTickのノードを持っていない(つまりnextTick最後のメインスレッドで実行し、非非同期除きます)が、先に実行するタスクの一般的なキューの:
マイクロタスクは、新しいマイクロタスクをエンキューすることができ、それらの新しいマイクロタスクは、次のタスクを実行するために開始する前に実行して、現在のイベントループ反復の終了前になります。
実際には、この関数は、フレームごとにバンドル別のブラウザをrequestAnimationFrameのタスクキューマイクロフック関数に幾分似ている、それはあなたが全体のタスクキューの先頭として理解することができる特定の時間に実行される着信キューの組成の関数でありますマイクロタスクキューの実装。
上記のコードは結果を理解することは困難ではないマイクロタスクのメカニズムを理解する、オーダー1,2,3,4,5,6ノード環境で印刷されます。
メインプロセスであって約束における同期コード、にconsole.log(「2」)// 1,2-
最後に、メインプロセスの実行:パラメータのpromise.nextTick // 3
最初のラウンドマイクロタスクキュー:関数(){...リターン4「」}、にconsole.log //この解決は、(関数を表し、直ちに実行されるので){...リターン「4」}意志一方、機能(){...リターン4「」}のsetTimeout内にラップ;のsetTimeoutは、ラップされた場合、最初のラウンドは、第二ラウンドマイクロタスクキューに入り、イベントループマイクロタスクキューに押し込まれます第二ラウンドのためのタスクキューの機能、印刷4
最初のラウンドのタスクは:のsetTimeoutははconsole.log( '5')// 5を含みます
第二ラウンドタスク:関数(){...リターン「4」} //関数は、第6ラウンドに入りました
実際のコードを書く、これらの関数の非同期実行が遅延をトリガしないようなAJAXリクエストとしてゼロの状況であり、そのトピックに加えて使用し、我々は対策を持っているときにイベントループを理解することは、任意の実用的なアプリケーションを評価していないようです。