非同期プログラミングは JavaScript の重要な側面であり、開発者はメイン スレッドをブロックすることなく、長いネットワーク リクエスト、ファイル操作、その他の時間のかかるタスクを実行できます。これにより、アプリケーションの応答性と使いやすさが確保されます。 JavaScript は、非同期操作を処理するための 3 つの主な方法、コールバック、プロミス、および非同期/待機を提供します。この記事では、これらの各メソッドについて詳しく説明し、詳細な例を通じてその構文、使用法、相違点を探っていきます。
JavaScript では、サーバーからのデータの取得、ファイルの読み取り、計算の実行など、完了までに時間がかかる操作を非同期で処理できます。これは、操作が完了するのを待っている間、JavaScript エンジンは他のタスクの実行を継続できることを意味します。これは、Web アプリケーションで効率的かつスムーズなユーザー エクスペリエンスを作成するために非常に重要です。
コールバックは、JavaScript で非同期操作を処理するための最も初期のメソッドの 1 つです。コールバックは、別の関数に引数として渡される単なる関数であり、非同期操作が完了すると実行されます。
function fetchData(callback) { setTimeout(() => { callback("Data fetched!"); }, 1000); } function displayData(data) { console.log(data); } fetchData(displayData);
上記の例では、fetchData は setTimeout を使用して非同期操作をシミュレートします。 1 秒後、displayData 関数を呼び出し、取得したデータを引数として渡します。
利点:
欠点:
Promise は、コールバックに関連する問題に対処するために ES6 (ECMAScript 2015) で導入されました。 Promise は、まだ完了していないが、将来に期待される操作を表します。保留、履行、または拒否の 3 つの状態のいずれかになります。
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 1000); }); } fetchData() .then(data => { console.log(data); }) .catch(error => { console.error("Error:", error); });
この例では、fetchData は「データがフェッチされました!」で解決される Promise を返します。 1秒後。 then メソッドは解決された値を処理するために使用され、catch はエラーを処理するために使用されます。
Promise を連鎖させて、一連の非同期操作を順番に実行できます。
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 1000); }); } function processData(data) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(`${data} Processed!`); }, 1000); }); } fetchData() .then(data => { console.log(data); return processData(data); }) .then(processedData => { console.log(processedData); }) .catch(error => { console.error("Error:", error); });
この例では、fetchData の後に processData が呼び出され、then を使用して結果が順番に処理されます。
利点:
欠点:
ES2017 で導入された Async/Await は、Promises を使用して非同期コードを記述する、より読みやすく簡潔な方法を提供します。 async キーワードは非同期関数を定義するために使用され、await キーワードは Promise が解決されるまで実行を一時停止するために使用されます。
async function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 1000); }); } async function displayData() { const data = await fetchData(); console.log(data); } displayData();
この例では、displayData はデータをログに記録する前に fetchData が完了するのを待つ非同期関数です。
Async/Await によるエラー処理は、try/catch ブロックを使用して実行できます。
async function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { reject("Failed to fetch data!"); }, 1000); }); } async function displayData() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error("Error:", error); } } displayData();
ここで、fetchData が失敗した場合、エラーは catch ブロックによって捕捉され、ログに記録されます。
利点:
欠点:
以上がJavaScript での非同期プログラミング: コールバック、プロミス、非同期/待機の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。