ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのpromiseとsetTimeoutの実行順序の問題(コード例)
この記事の内容はJavaScriptにおけるpromiseとsetTimeoutの実行順序(コード例)ですので、お困りの方は参考にしていただければ幸いです。
Promise は es6 によって導入された言語標準であり、非同期プログラミングのソリューションです。
この記事を読むための前提条件は、ブラウザーのイベント ループのメカニズムと基本的な機能を理解することです。 Promise と機能 (自己実行機能、状態を元に戻せない機能など) の使用法。
次のコードと質問を見てみましょう
setTimeout(function(){console.log(1)},0); new Promise(function(resolve){ console.log(2) for( var i=0 ; i<10000 ; i++ ){ i==9999 && resolve() } console.log(3) }).then(function(){ console.log(4) }); console.log(5); // 这的问题是,为什么答案是 2 3 5 4 1 // 而不是 2 3 5 1 4
promise.then と setTimeout は両方とも非同期であるため、promise.then のイベントはイベント ループ キュー内で setTimeout の後ろに配置されるはずですが、なぜpromise.then が setTimeout より前に出力されるのでしょうか。
イベント ループの概念
Javascript はシングルスレッドであり、すべての同期タスクはメイン スレッドで実行されます。
メインスレッド内のすべてのタスクが実行されると、システムはタスクキュー内のイベントを「順番に」読み取ります。対応する非同期タスクがメインスレッドに入り、実行を開始します。
非同期タスクには違いがあるため、実行優先順位も異なります。大きく分けて、マイクロタスク(Promise、MutaionObserverなどのマイクロタスク)とマクロタスク(setTimeout、setInterval、I/Oなどのマクロタスク)に分かれます。
Promise executor のコードは同期的に呼び出されますが、コールバックはマイクロタスクに基づいています。
以上がJavaScriptのpromiseとsetTimeoutの実行順序の問題(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。