非同期プログラミングは、開発者がメイン スレッドをブロックすることなく、長いネットワーク リクエスト、ファイル操作、その他の時間のかかるタスクを実行できるようにする 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 を使用して順番に処理されます。
利点:
短所:
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 ブロックによって捕捉され、ログに記録されます。
利点:
短所:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3