ホームページ ウェブフロントエンド jsチュートリアル JavaScript 開発者のための Aysnc と Await の実践ガイド

JavaScript 開発者のための Aysnc と Await の実践ガイド

Dec 24, 2024 pm 07:11 PM

導入

Async と Await は、ECMAScript 2017 (ES8) で導入された JavaScript キーワードで、より読みやすく、同期に似た、管理しやすい方法で非同期コードを作成できるようにします。これらにより、API からのデータのフェッチなど、完了までに時間がかかる操作の処理が簡素化されます。

本題に入る前に、まず JavaScript の同期プログラミングと非同期プログラミングの概念を理解しましょう。同期プログラミングでは、タスクは出現順に次々に実行されます。各タスクは、次のタスクが開始される前に完了する必要があります。一方、非同期プログラミングではタスクをバックグラウンドで実行できるため、JavaScript は前のタスクの終了を待たずに他のタスクの実行を継続できます。

ご存知のとおり、JavaScript はシングルスレッド言語です。つまり、一度に 1 つのタスクしか実行できません。その場合、JavaScript は非同期コードをどのように処理するのでしょうか?これは、JavaScript ランタイム環境と並行して動作する重要なメカニズムであるイベント ループによって可能になります。イベント ループにより、メイン スレッドをブロックせずに非同期操作を実行できるため、JavaScript の応答性が確保されます。早速、コーヒーを飲みながら今日のトピックに移りましょう!

非同期とは何ですか?

この概念をより深く理解するために、より実践的なアプローチを採用します。 async と await が導入される前は、Promise は ES6 (ECMAScript 2015) で導入された「古い方法」を使用して処理されていました。以下の例を見てみましょう。

A Practical guide to Aysnc and Await for JavaScript Developers

上記のコードは、Promise を処理するための従来の構文を示しています。 Promise コンストラクターは、新しい Promise インスタンスを作成するために使用されます。この関数は、引数として関数 (エグゼキューター関数と呼ばれる) を受け取ります。この関数には、resolve と accept という 2 つのパラメーターが含まれます。この実行関数には、非同期操作のロジックが含まれています。この例では、resolve がすぐに呼び出され、Promise が特定の値で正常に完了したことを通知します。 Promise が解決されると、.then メソッドがトリガーされ、コールバックを実行して結果を記録します。

ただし、この構文は覚えるのが少し難しい場合があります。 async/await の導入により、Promise を処理するプロセスが簡素化され、読みやすく理解しやすくなりました。以下の例を見てみましょう。

A Practical guide to Aysnc and Await for JavaScript Developers
非同期関数を実装するには、async キーワードを使用します。これは、これが通常の関数ではなく非同期関数であることを JavaScript に伝えます。 2 番目の例は、アロー関数を使用して同じことを行う方法を示しています。

もう 1 つ注意すべき重要な概念は、await キーワードです。 async と await は両方とも連携して、Promise の処理を​​簡素化します。 await キーワードは非同期関数内でのみ使用できます。関数の外や通常の関数内では使用できません。これは、常に、非同期としてマークされた関数内に存在する必要があります。基本を説明したので、概念をさらに詳しく見ていきましょう!

舞台裏での仕組み

多くの JavaScript 開発者はコード内で async/await を定期的に使用していますが、内部で async/await がどのように機能するかを真に理解している開発者はほんのわずかです。そこでこのチュートリアルの出番です。例を見て詳しく見てみましょう。

A Practical guide to Aysnc and Await for JavaScript Developers

この例では、async/awaitapproach と比較して Promise がどのように機能するかをよりよく理解するために .then メソッドを使用します。 handlePromise() 関数が呼び出されると、コードが 1 行ずつ実行されます。 JavaScript が .then メソッドに遭遇すると、コールバックをマイクロタスク キューに登録し、すぐに次の行に移動して「hello world」を出力します。

すべての同期タスクが完了すると、JavaScript エンジンは保留中のタスクがないかマイクロタスク キューをチェックします。 5 秒後、setTimeout が完了し、そのコールバックがコール スタックにプッシュバックされます。この時点で、Promise が解決され、登録されたコールバックが実行され、結果がログに記録されます。

つまり、JavaScript エンジンは待機せず、コードの次の行に直接移動します。では、async/await を使用する場合も同じ動作が適用されるのでしょうか、それとも異なる動作をするのでしょうか?調べてみましょう!

A Practical guide to Aysnc and Await for JavaScript Developers
上の例では、handlePromise() 関数が呼び出されると、最初の行「the start」が出力されます。次に、JavaScript は await キーワードを検出します。これは、関数が非同期であり、Promise が含まれていることを示します。 setTimeout により、Promise の解決に 5 秒かかることがわかります。この時点で、handlePromise() 関数は一時停止され (呼び出しスタックから削除され)、関数内の await 以降のコードは一時停止されます。

JavaScript エンジンはプログラムの残りの部分を実行し続けます。 5 秒後、Promise が解決され、中断された関数がコール スタックに返され、handlePromise() 内の残りの行「Promise issolved」と「the end」が順番に実行されます。

関数を一時停止してもメインスレッドはブロックされないことに注意することが重要です。 handlePromise() 関数の外側に他のコードが記述されている場合、そのコードは Promise の解決を待っている間に実行されます。

以下の例は、実際の動作を示しています。

A Practical guide to Aysnc and Await for JavaScript Developers

この例では、最初の出力が開始です。 JavaScript が await キーワードを検出すると、Promise の解決に 5 秒かかることが認識されます。この時点で、関数は一時停止され、JavaScript は関数の外部のコードの実行に移ります。その結果、次に「We are external」が印刷されます。

5 秒後に Promise が解決されると、handlePromise() 関数がコール スタックに復元され、残りの行が実行され、Promise が解決された後に終了が表示されます。

もう 1 つの例を調べてみましょう。概念をよりよく理解するために、他の例で async/await を使用して API 呼び出しを行ってみます。

A Practical guide to Aysnc and Await for JavaScript Developers
上記のコードでは、実行プロセスは前に説明したのと同じ原則に従います。 JavaScript がフェッチ関数に遭遇すると、getData() 関数を一時停止し、フェッチ呼び出しが応答オブジェクトを返すのを待ちます。このオブジェクトには、ステータス、ヘッダー、応答の本文などのさまざまなプロパティが含まれます。応答が利用可能になると、関数は実行を再開します。

応答本文は必要なデータですが、生の形式 (テキストまたはバイナリなど) であり、すぐには使用できません。操作を容易にするためにこれを JavaScript オブジェクトに変換するには、生の JSON 応答を解析する .json() メソッドを使用します。このプロセスには別の Promise が関与するため、2 番目の await が必要になります。 Promise が解決されるまで、関数は再び一時停止されます。

両方の Promise が満たされると、getData() 関数が再開され、解析されたデータがコンソールに出力されます。フェッチの仕組みを説明する簡単な方法ですね。さて、本題の議論に戻りましょう。 API 応答が失敗した場合はどうなりますか? async/await でエラーを管理するにはどうすればよいでしょうか?これについては次のセクションで詳しく見てみましょう。

Async/Await によるエラーの処理

従来、Promise のエラーは .catch メソッドを使用して処理されていました。しかし、async/await を使用するときにエラーを処理するにはどうすればよいでしょうか?ここで try...catch ブロックが登場します。

A Practical guide to Aysnc and Await for JavaScript Developers
上記のコードでは、Promise は try ブロックで囲まれており、Promise が正常に解決された場合に実行されます。ただし、Promise が拒否された場合、エラーはキャッチされ、catch ブロック内で処理されます。

しかし、従来の方法でもエラーを処理できることをご存知ですか?以下に例を示します:

A Practical guide to Aysnc and Await for JavaScript Developers
従来のアプローチを使用して async/await でエラーを処理するには、上で示したように、関数に catch メソッドをアタッチするだけです。これは try/catch ブロックと同じように機能します。

結論

Async/await は JavaScript の非同期操作の処理方法に革命をもたらし、.then や .catch などの従来のメソッドと比べてコードが読みやすく、管理しやすくなりました。 async と await を活用することで、より同期しているように感じられる非同期コードを作成でき、コード全体の明瞭さが向上します。イベント ループやマイクロタスク キューなどの内部動作を理解しながら、async/await を実装することは簡単で、最新の JavaScript 開発にとって非常に効果的です。 try/catch または .catch を使用して適切なエラー処理を行うことで、成功した Promise と失敗した Promise の両方を自信を持って管理できます。

最後までお付き合いいただきありがとうございました!この記事で async/await がもう少しわかりやすくなったと幸いです。コーディングの冒険が成功することを祈っています。素晴らしいものを構築してください!

以上がJavaScript 開発者のための Aysnc と Await の実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

C/CからJavaScriptへ:すべてがどのように機能するか C/CからJavaScriptへ:すべてがどのように機能するか Apr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScript in Action:実際の例とプロジェクト JavaScript in Action:実際の例とプロジェクト Apr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンの理解:実装の詳細 JavaScriptエンジンの理解:実装の詳細 Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScript通訳者とコンパイラにおけるC/Cの役割 JavaScript通訳者とコンパイラにおけるC/Cの役割 Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

See all articles