🫣

JavaScriptの非同期処理

2025/02/21に公開

1. はじめに:同期処理と非同期処理

JavaScript はシングルスレッドで動作しますが、非同期処理を行うことで、時間のかかる処理(例:ネットワークリクエスト、ファイルの読み込み)の完了を待たずに、次の処理を進めることができます。

  • 同期処理: 処理が順番に実行され、前の処理が終わるまで次の処理は開始されません。
  • 非同期処理: 時間のかかる処理をバックグラウンドで実行し、その間にも他の処理を進めることができます。処理が完了したら、コールバック関数や Promise を使って結果を受け取ります。

2. async/await:非同期処理をシンプルに書くための構文

async/await は、非同期処理を同期処理のように書くことができる構文です。

  • async: 関数宣言の前に付けることで、その関数が非同期処理を含むことを示します。async 関数は常に Promise を返します。
  • await: Promise の前に付けることで、その Promise が解決されるまで処理を一時停止します。await は async 関数の中でしか使用できません。

JavaScript

async function fetchData() {
  const response = await fetch('https://example.com/data.json');
  const data = await response.json();
  return data;
}

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

3. Promise:非同期処理の状態を管理するオブジェクト

Promise は、非同期処理の結果を保持するオブジェクトです。Promise には以下の 3 つの状態があります。

  • pending(保留): 非同期処理がまだ完了していない状態
  • fulfilled(成功): 非同期処理が正常に完了した状態
  • rejected(失敗): 非同期処理が失敗した状態

Promise は then() メソッドと catch() メソッドを使って、処理結果に応じた処理を記述します。

JavaScript

fetch('https://example.com/data.json')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

4. async/await と Promise の関係性

async/await は、Promise のシンタックスシュガーです。中身は Promise を実行しています。async/await を使うことで、Promise の then()catch() を書く手間を減らすことができます。

JavaScript

async function fetchData() {
  try {
    const response = await fetch('https://example.com/data.json');
    const data = await response.json();
    return data;
  } catch (error) {
    console.error(error);
  }
}

5. まとめ

  • JavaScript の非同期処理は、時間のかかる処理を効率的に行うために重要です。
  • async/await は、非同期処理を同期処理のように書くことができる構文です。
  • Promise は、非同期処理の結果を保持するオブジェクトです。
  • async/await は Promise をより簡単に扱うための構文であり、Promise と密接な関係があります。

Discussion