JavaScript | 非同期処理をブレークポイントで止める

JavaScript
スポンサーリンク

では、複雑な非同期処理の流れをブラウザで追跡する練習用サンプルを作ります。
このサンプルでは、

  • 複数の fetch を順番に呼ぶ
  • setTimeout を使って非同期処理を遅延させる
  • Promise.all で並列処理の結果をまとめる

という流れを体験できます。
ブレークポイントとウォッチを組み合わせて、非同期の呼び出し順や変数の変化を追いながらデバッグできます。


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>非同期デバッグ応用サンプル</title>
</head>
<body>
<h1>非同期デバッグ応用サンプル</h1>
<button id="runBtn">非同期処理実行</button>

<script>
// ---------------------------
// 1. setTimeout + Promise を使った遅延関数
// ---------------------------
function delay(ms, value) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log("delay resolved:", value); // ← ここにブレークポイント
      resolve(value);
    }, ms);
  });
}

// ---------------------------
// 2. 複数 fetch 関数
// ---------------------------
async function fetchTodo(id) {
  const res = await fetch(`https://jsonplaceholder.typicode.com/todos/${id}`);
  const data = await res.json();
  console.log(`Fetched Todo ${id}:`, data.title); // ← ここにブレークポイント
  return data.title;
}

// ---------------------------
// 3. メイン非同期処理
// ---------------------------
async function mainAsyncTask() {
  console.log("mainAsyncTask: start");

  // ① fetch を順番に実行
  const title1 = await fetchTodo(1);
  const title2 = await fetchTodo(2);

  // ② setTimeout の遅延処理
  const delayed = await delay(1000, "Delayed Value");

  // ③ Promise.all で並列 fetch
  const titles = await Promise.all([fetchTodo(3), fetchTodo(4)]);
  console.log("All fetched titles:", titles); // ← ブレークポイント

  console.log("mainAsyncTask: end");
}

// ---------------------------
// ボタンにイベント設定
// ---------------------------
document.getElementById("runBtn").addEventListener("click", mainAsyncTask);
</script>
</body>
</html>
HTML

練習手順

  1. このコードを async_debug_advanced.html などで保存
  2. ブラウザで開く → F12 → Sources タブを開く
  3. 下記の行にブレークポイントを置く
    • console.log("delay resolved:", value);
    • console.log(Fetched Todo ${id}:, data.title);
    • console.log("All fetched titles:", titles);
  4. ページ上の「非同期処理実行」ボタンをクリック
  5. ブレークポイントで停止 → Scope / Watch / Call Stack で変数の状態を確認
  6. ステップ実行で処理の順番を追う

追加の練習ポイント

  • Watch に title1 / title2 / delayed / titles を追加して値を追跡
  • Step intofetchTododelay の中に入り、非同期処理の呼び出し順を確認
  • Promise.all の中の並列処理がどの順番で解決されるか観察

💡 このサンプルを繰り返し操作すると、

  • 非同期処理の呼び出し順
  • await で順番待ちする挙動
  • Promise.all で並列処理する挙動

が自然に理解できるようになります。

タイトルとURLをコピーしました