JavaScript をしばらく使ったことがある人なら、おそらく非同期コードの概念に遭遇したことがあるでしょう。 API リクエストを行う場合でも、ユーザー入力を待機する場合でも、大規模なデータ セットをロードする場合でも、アプリケーションをスムーズに実行し続けるには非同期操作が不可欠です。
しかし、非同期コードとは正確には何でしょうか?また、同期コードとどう違うのでしょうか?この投稿では、非同期プログラミングが JavaScript における変革をもたらす理由を詳しく説明します。
簡単に言うと、非同期コード により、メインの実行フローをブロックすることなくタスクをバックグラウンドで実行できます。これは、操作 (ネットワーク リクエストなど) が完了するのを待つ代わりに、プログラムは他のコードの実行を継続できることを意味します。
JavaScript は シングルスレッド であるため、この動作は特に重要です。つまり、メインスレッドでは一度に 1 つのタスクしか実行できません。非同期コードがないと、長時間実行される操作によってプログラム全体がブロックされ、アプリが応答しなくなります。
まず、同期コードと非同期コードが実際にどのように動作するかを比較してみましょう。
同期コード例
function fetchData() { const data = getDataFromServer(); // Assume this takes 3 seconds console.log(data); } console.log('Start'); fetchData(); // Blocks the code until data is fetched console.log('End'); // This will only run after 3 seconds, when fetchData completes
この同期例では、すべてが一度に 1 ステップずつ行われます。 fetchData() が呼び出されると、データがフェッチされるまで残りのコード (console.log('End') を含む) がブロックされるため、3 秒の遅延が発生します。
非同期コード例
次に、非同期コードで書かれた同じ例を見てみましょう。
async function fetchData() { const data = await getDataFromServer(); // Assume this takes 3 seconds console.log(data); } console.log('Start'); fetchData(); // This starts fetching data in the background console.log('End'); // This runs immediately, without waiting for fetchData to complete
ここでは、コードはブロックしません。 fetchData() の実行が開始されますが、データがフェッチされるのを待つ代わりに、コードは console.log('End') に進みます。フェッチ操作が完了するたびに、データがログに記録されます。
これが非同期コードの力です。遅い操作が完了するのを待っている場合でも、アプリケーションの実行と応答性を維持します。
JavaScript で非同期コードが不可欠である理由はいくつかあります。
1.ノンブロッキング操作
ネットワークリクエスト、ファイルの読み取り、データベースとのやり取りなどのタスクを処理するとき、プログラムがフリーズすることは望ましくありません。非同期コードにより、長時間実行操作がアプリケーションの残りの部分をブロックせず、応答性を維持できるようになります。
2.パフォーマンスの向上
非同期プログラミングでは、複数のタスクを同時に実行できます。たとえば、各リクエストが順番に完了するのを待たずに、複数の API から同時にデータをフェッチできます。この同時実行により、アプリの全体的なパフォーマンスが向上します。
3.遅い操作の処理
サーバーからのデータのフェッチなど、時間がかかる操作はすべて、非同期コードの候補となります。メインスレッドをブロックしないことで、アプリは遅い操作をより効率的に処理できます。
JavaScript には、非同期操作を処理するいくつかの方法が用意されています。そのうちの 1 つを見てみましょう。
非同期/待機
async と await を使用すると、同期コードのように見え、動作する非同期コードを作成できるため、可読性が向上し、エラー処理がより簡単になります。
async function fetchData() { try { const response = await fetch('https://api.example.com'); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } }
非同期関数を使用して Promise を待機すると、Promise が解決されるまで関数の実行を一時停止でき、非同期コードの推論が容易になります。
非同期コードでのエラーの処理は難しい場合があります。同期コードでは、通常、エラーは try...catch を使用して捕捉されます。ただし、非同期タスクではエラーがすぐに発生しない可能性があるため、エラーを処理するには別の戦略が必要です。
約束:
.catch():
を使用してエラーを処理します。fetch('https://api.example.com') .then((response) => response.json()) .then((data) => console.log(data)) .catch((error) => console.error(error)); // Error is handled here
非同期/待機あり:
非同期関数では、try...catch を使用して、同期コードの場合と同様にエラーを処理できます。
async function fetchData() { try { const response = await fetch('https://api.example.com'); const data = await response.json(); console.log(data); } catch (error) { console.error(error); // Error is handled here } }
これにより、非同期コードでのエラー処理がより直感的になります。
非同期コードは JavaScript の基本概念であり、特にネットワーク リクエストやファイル操作など、時間がかかるか不明なタスクを処理する場合に当てはまります。非同期コードの仕組みを理解し、Promises や async/await などのパターンを使用することで、より効率的で応答性が高く、保守しやすいアプリケーションを作成できます。
重要なポイント:
非同期コードはノンブロッキングなので、タスクの完了を待っている間もプログラムの他の部分は実行を継続できます。
JavaScript は、async/await などの非同期操作を処理するいくつかの方法を提供します。
非同期コードでのエラーの処理方法を理解することは、堅牢なアプリケーションを作成するために重要です。
以上がJavaScript の非同期コードを理解する: それが何であり、なぜ重要なのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。