JavaScript がカフェラテを取りに来るまでコーヒーショップで列に並んでいるように感じたことはありますか?非同期プログラミングでは、そのように感じることがよくあります。複数の注文が同時に処理されると、待たされてしまう可能性があります。幸いなことに、Promises や async/await などのツールにより、プロセスがスムーズかつ効率的に維持され、コードが遅延なく動き続けることが保証されます。
このガイドでは、Promise がどのように機能するか、async/await が導入された理由、およびそれによって非同期コードの作成がどのように簡素化されるかについて詳しく説明します。これらの概念を理解しようとしている初心者でも、各アプローチをいつ使用するかを明確にしたい場合でも、この記事は基本をマスターするのに役立ちます。
約束とは何ですか?
Promise は、非同期操作を処理するための JavaScript の基本的な概念です。基本的に、Promise は、今、後で、または決して利用できない値を表します。これは荷物の追跡番号のようなものだと考えてください。荷物がまだ手元にない場合でも、追跡番号によって荷物が配達中であるという確信が得られます (または、何か問題が発生した場合はそれを知ることができます)。
「今、後で、それとも決して」という物語に基づいて、Promise は実際には 3 つの状態のいずれかで動作します。
- 保留中: 非同期操作はまだ完了していません。
- 履行: 操作は正常に完了し、Promise に結果が保持されています。
- 拒否されました: 問題が発生し、Promise にエラーが発生しました。
Promise の作成と操作には、単純な API が必要です。 Promise を定義する方法は次のとおりです:
const fetchData = new Promise((resolve, reject) => { setTimeout(() => { const data = { id: 1, name: "JavaScript Basics" }; resolve(data); // Simulates a successful operation // reject("Error: Unable to fetch data"); // Simulates a failure }, 1000); });
結果を処理するには、.then()、.catch()、および .finally() メソッドを Promise オブジェクトにチェーンできます。
fetchData .then((data) => { console.log("Data received:", data); }) .catch((error) => { console.error(error); }) .finally(() => { console.log("Operation complete."); });
then() メソッドのコールバックは、Promise が成功した結果で解決されると実行されます。 .catch() メソッドのコールバックは、Promise が失敗した結果で解決されたときに実行され、finally() メソッドのコールバックは、解決の結果に関係なく、Promise が解決された後に実行されます。
約束の利点
Promise は、「コールバック地獄」と呼ばれることが多い、深くネストされたコールバックに代わるクリーンな代替手段を提供します。コールバックを積み重ねる代わりに、Promise を使用すると連鎖が可能になり、操作の流れを理解しやすくなります。
doTask1() .then((result1) => doTask2(result1)) .then((result2) => doTask3(result2)) .catch((error) => console.error("An error occurred:", error));
これと同じコードが従来のコールバックを使用して記述されていた場合、次のようになります。
doTask1((error1, result1) => { if (error1) { console.error("An error occurred:", error1); return; } doTask2(result1, (error2, result2) => { if (error2) { console.error("An error occurred:", error2); return; } doTask3(result2, (error3, result3) => { if (error3) { console.error("An error occurred:", error3); return; } console.log("Final result:", result3); }); }); });
紛らわしいですね。これが、Promise が導入されたときに JavaScript コーディング標準の変革者となった理由です。
約束の欠点
Promise は従来のコールバック関数を大幅に改善しましたが、独自の課題がないわけではありません。利点にもかかわらず、複雑なシナリオでは扱いにくくなり、コードが冗長になり、デバッグが困難になる可能性があります。
.then() チェーンを使用しても、複数の非同期操作を処理する場合、Promise によってコードが乱雑になる可能性があります。たとえば、.then() ブロックを使用した逐次操作の管理や .catch() を使用したエラー処理は、反復的で理解しにくいと感じることがあります。
const fetchData = new Promise((resolve, reject) => { setTimeout(() => { const data = { id: 1, name: "JavaScript Basics" }; resolve(data); // Simulates a successful operation // reject("Error: Unable to fetch data"); // Simulates a failure }, 1000); });
ネストされたコールバックよりもすっきりしていますが、特に詳細なカスタム エラー処理ロジックが必要な場合、チェーン構文は依然として冗長です。さらに、チェーンの最後に .catch() を追加するのを忘れると、サイレントエラーが発生し、デバッグが困難になる可能性があります。
さらに、Promise のスタック トレースは、同期コードのスタック トレースほど直感的ではありません。エラーが発生した場合、スタック トレースには、問題が非同期フローのどこで発生したかが明確に示されない場合があります。
最後に、Promise はコールバック地獄の軽減に役立ちますが、タスクが相互依存している場合には依然として複雑さが生じる可能性があります。ネストされた .then() ブロックは、特定のユースケースで再び使用される可能性があり、解決するはずだった可読性の課題の一部を元に戻します。
非同期/待機を入力してください
ES2017 (ES8) での async/await の導入により、JavaScript での非同期プログラミングは大きな飛躍を遂げました。 Promises の上に構築された async/await を使用すると、開発者は同期コードのように見え、動作する非同期コードを作成できます。これにより、可読性が向上し、エラー処理が簡素化され、冗長性が軽減されるため、真の変革をもたらします。
非同期/待機とは何ですか?
Async/await は、非同期コードを理解し、保守しやすくするために設計された構文です。
async キーワードは、常に Promise を返す関数を宣言するために使用されます。この関数内で、 await キーワードは Promise が解決されるか拒否されるまで実行を一時停止します。これにより、複雑な非同期操作であっても、直線的で直感的なフローが実現します。
これは、上で見たのと同じコード例を async/await で簡素化する方法の例です。
fetchData .then((data) => { console.log("Data received:", data); }) .catch((error) => { console.error(error); }) .finally(() => { console.log("Operation complete."); });
Async/await を使用すると、.then() チェーンが不要になり、コードが順番に流れるようになります。これにより、特に次々に実行する必要があるタスクの場合、ロジックに従うことが容易になります。
Promise では、.catch() を使用してチェーンのすべてのレベルでエラーを捕捉する必要があります。一方、Async/await は、try/catch を使用したエラー処理を統合し、繰り返しを減らし、明確さを向上させます。
Async/await は、Promise よりも直感的なスタック トレースを生成します。エラーが発生した場合、トレースには実際の関数呼び出し階層が反映されるため、デバッグのストレスが軽減されます。全体として、async/await は同期コードの記述方法と一致しているため、より「自然」に感じられます。
Promise と async/await の比較
すでに見たように、Async/await は読みやすさの点で、特に逐次操作の場合に優れています。 Promise は、.then() および .catch() チェーンを使用すると、すぐに冗長または複雑になる可能性があります。対照的に、async/await コードは同期構造を模倣しているため、理解しやすいです。
柔軟性
特に同時タスクの場合、Promise は依然としてその役割を果たしています。 Promise.all() や Promise.race() などのメソッドは、複数の非同期操作を並行して実行する場合により効率的です。 Async/await もこのようなケースを処理できますが、同じ結果を達成するには追加のロジックが必要です。
const fetchData = new Promise((resolve, reject) => { setTimeout(() => { const data = { id: 1, name: "JavaScript Basics" }; resolve(data); // Simulates a successful operation // reject("Error: Unable to fetch data"); // Simulates a failure }, 1000); });
エラー処理
単一の .catch() による集中エラー処理は Promise の線形チェーンではうまく機能しますが、可読性を最大限に高めるために、チェーン全体で異なるエラー タイプに対して分散 .catch 呼び出しを使用することをお勧めします。
一方、try/catch ブロックは、特に連続タスクを処理する場合に、エラーを処理するためのより自然な構造を提供します。
パフォーマンス
パフォーマンスの点では、async/await は Promise の上に構築されているため、基本的に Promise と同等です。ただし、同時実行性が必要なタスクの場合は、Promise.all() を使用すると複数の Promise を並行して実行でき、いずれかの Promise が拒否されるとすぐに失敗するため、より効率的になります。
いつどれを使用するか
複数の API から同時にデータを取得するなど、タスクに多くの同時操作が含まれる場合は、おそらく Promise がより良い選択です。非同期コードに多くのチェーンが含まれていない場合、Promise はその単純さからその状況にも適しています。
一方、async/await は、多くのタスクを順番に実行する必要がある場合や、可読性と保守性が優先される場合に優れています。たとえば、データの取得、変換、保存などの一連の依存操作がある場合、async/await はクリーンな同期構造を提供します。これにより、操作の流れを理解しやすくなり、try/catch ブロックによる集中エラー処理が簡素化されます。 Async/await は、初心者や読みやすいコードを優先するチームに特に役立ちます。
結論
JavaScript は、非同期操作を管理するための 2 つの強力なツール、Promises と async/await を提供します。 Promise は開発者が非同期タスクを処理する方法に革命をもたらし、コールバック地獄などの問題を解決し、チェーンを可能にしました。 Async/await は Promises に基づいて構築されており、特に連続タスクの場合に、より自然で直観的に感じられるクリーンな構文を提供します。
両方のアプローチを検討したので、ニーズに最適な方を選択できるようになりました。 Promise ベースの関数を async/await に変換して、読みやすさの違いを観察してください。
詳細については、MDN Promise のドキュメントを確認するか、インタラクティブなコーディング サンドボックスを試してください。
以上がAsync/Await vs Promises: JavaScript 初心者のための簡単なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

メモ帳++7.3.1
使いやすく無料のコードエディター
