😺

JavaScriptにおける非同期処理、Promise、エラーハンドリングの基本

2024/10/17に公開

はじめに

Webアプリケーション開発において、非同期処理は避けて通れない重要なトピックです。特に画像の読み込みやAPIリクエストなど、時間のかかる操作を扱う際に適切な非同期処理が不可欠です。この記事では、非同期処理の基本、Promiseの活用、そしてエラーハンドリングについて解説します。

非同期処理の基本

JavaScriptは単一スレッドで動作しますが、非同期処理を利用することで、長時間かかる処理を待たずに次の処理を実行できます。

console.log("Start");
setTimeout(() => {
  console.log("Timeout");
}, 0);
console.log("End");

// 出力:
// Start
// End
// Timeout

この例では、setTimeoutが非同期で実行されるため、"Timeout"の出力が最後になります。

Promiseの活用

Promiseは非同期処理をより扱いやすくする機能です。

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = { id: 1, name: "John" };
      resolve(data);
      // エラーの場合: reject(new Error("Failed to fetch data"));
    }, 1000);
  });
}

fetchData()
  .then(data => console.log(data))
  .catch(error => console.error(error));

この例では、fetchData関数がPromiseを返し、データ取得の成功時はresolve、失敗時はrejectを呼び出します。

async/awaitの使用

async/awaitはPromiseをさらに読みやすく書くための構文です。

async function getData() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error("Error:", error);
  }
}

getData();

async関数内でawaitキーワードを使用することで、Promiseの結果を同期的に扱えます。

エラーハンドリング

非同期処理でのエラーハンドリングは特に重要です。try-catchブロックを使用して、エラーを適切に捕捉し処理します。

async function processImage() {
  try {
    await loadImage();
    await processData();
    await saveResult();
    console.log("処理完了");
  } catch (error) {
    console.error("エラーが発生しました:", error);
    // ここでユーザーへのエラー通知などを行う
  }
}

この構造により、各処理段階でエラーが発生した場合でも適切に捕捉され、処理されます。

まとめ

  • 非同期処理は、時間のかかる操作を効率的に扱うために重要です。
  • Promiseは非同期処理を構造化し、管理しやすくします。
  • async/awaitは、Promiseベースのコードをより読みやすく、書きやすくします。
  • 適切なエラーハンドリングは、堅牢なアプリケーション開発に不可欠です。

これらの概念を理解し適切に活用することで、より効率的で信頼性の高いJavaScriptアプリケーションを開発できます。

Discussion