マクロタスクとマイクロタスクに関する質問です。 setTimeout(関数(){ コンソールログ('1') }); 新しいPromise(function(resolve){ コンソールログ('2'); 解決する(); }).then(関数(){ コンソールログ('3') }); コンソールログ('4') 上記のコードの実行順序は何ですか?
おそらく、次のように考えているのでしょう。js が 1 行ずつ実行されることを知らないのでしょうか。SetTimeout ちょっとパニックになったので、ブラウザに貼り付けて見てみました。 信じられない 混乱しながらも、JavaScriptの動作の仕組みをじっくり勉強するしかありません! 1. JavaScriptについて
2. JavaScript イベントループjs はシングルスレッドなので、ウィンドウが 1 つしかないカフェテリアのようなものです。学生は 1 人ずつ並んで食事を取る必要があります。同様に、js タスクも 1 つずつ順番に実行する必要があります。このモードは実行が簡単ですが、将来的に需要、トランザクション、リクエストが増加すると、このシングルスレッド モードの実行効率は必然的に低くなります。 1 つのタスクの実行に長い時間がかかる場合、その間に後続のタスクを実行することはできません。 ニュースに含まれる高解像度の写真の読み込みが非常に遅いのはよくあることです。写真が完全に表示されるまで、Web ページが停止したままでよいのでしょうか?この問題を解決するために、 JavaScript 言語ではタスク実行モードを同期と非同期に分けます。
地図の内容を言葉で表現すると次のようになります。
コード式の場合: データ = [] とします。 $.ajax({ url:blog.csdn.net、 データ:データ、 成功:() => { console.log('送信に成功しました!'); } }) console.log('コード実行が終了しました'); 上記は単純な Ajax リクエスト コードです。
上記のテキストとコードを通じて、js の実行順序について大まかに理解していただけたと思います。しかし、これは、何人かの友人が 2、4、1、3 と答えた理由でもあります。 しかし、実際には、非同期キューにはまだトリックが残っています。面接の質問では、 3. マクロタスクとマイクロタスクマクロタスクとマイクロタスクは標準ではないため、人によって理解の仕方は異なりますが、js では実行順序が統一されています。 マクロタスク:
マイクロタスク:
マクロタスクには以下が含まれます: <script> 全体のコード、 process.nextTickは大きく異なり、異なるノードは均一に実行されず、標準がありません。 ヒント: <script> コード全体をマクロ タスクに入れる人もいますが、私は個人的には好きではありません。私の場合は、実行のメイン スレッドだけです。私は個人的に、マクロ タスクとマイクロ タスクの両方を非同期タスクに分類しています。 面接の質問をもう一度見てみましょう。 //コールバックは非同期タスクです setTimeout(function(){//macro task console.log('1') }); 新しいPromise(function(resolve){ console.log('2');//メインスレッドを同期するresolve(); }).then(function(){//microtask console.log('3') }); console.log('4') //メインスレッドを同期する
したがって、結果は 2、4、3、1 です。 さらに、これについて詳しく説明しましょう。 setTimeout(() =>{//マクロタスクキュー1 console.log('1'); //マクロ タスク チーム 1 タスク 1 setTimeout(() =>{//マクロタスクキュー3(マクロタスクキュー1内のマクロタスク) コンソールログ('2') }, 0) 新しいPromise(resolve => { 解決する() console.log('3') //マクロタスクキュー1タスク2 }).then(() =>{//マクロタスク キュー 1 のマイクロタスク console.log('4') }) }, 0) setTimeout(() =>{//マクロタスクキュー2 コンソールログ('5') }, 0) console.log('6') //メインスレッドを同期する
上記のコードでは何が出力されますか? 4. マクロタスクとマイクロタスクを拡張する上記の質問は複雑です。よく考えてみてください。この複雑な状況で、どのように一つずつ実行すればよいのでしょうか。
検証後、結果は正しいです! js のマクロタスクとマイクロタスクに関するこの記事はこれで終わりです。js のマクロタスクとマイクロタスクに関する関連情報をさらに知りたい場合は、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
序文:最も一般的に使用される MySQL 論理バックアップ ツールは mysqldump です。通常...
今日、私はプロジェクトの移行の問題に取り組んでいましたが、突然、大量の写真をどうやって移動したらよい...
たくさんのチュートリアルを読みましたが、うまくインストールできませんでした。しばらく試行錯誤した後、...
目次導入1. one-click.jsとは2. パッケージングツールはどのように機能しますか? 3....
序文レイアウトの点では、Gobang はランダムな動きを目的とするゲームよりも実装がはるかに簡単で、...
最終的な効果は次のようになります。アニメーションは2つのステップに分かれていますランニング軌道を開発...
目次1.Vue.js の機能: 2.Observer.js 関数 (データハイジャック): 3. C...
apache: ポートに基づいて仮想ホストを作成する仮想ホスト(a、b、c)の作成を例に挙げます1)...
<area> タグは主にイメージマップで使用されます。イメージマップにアクティブ領域 (...
まず、図をダウンロードしてください 1. まず、centos7に付属しているmariadbをアンイン...
序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...
実際、多くの人が「テーブルは絶対に使用すべきではないと聞いたことがある」と言いますが、これは絶対に間...
みなさんこんにちは。今日は12連休ですが、何かお買い物はしましたか?今日は「Linux View S...
1.リスナーを見る時計のご紹介 'vue' から { ref, reactive, ...
1. 準備1.1 Pythonインストールパッケージをダウンロードします(注:Pythonバージョン...