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

導入

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 までご連絡ください。
JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール