では、さらに高度な 「複数 API を並列で呼び出す(Promise.all)+例外発生時にどこで止まるかをステップ実行」 のデバッグ例を作ります。
Node.js + VSCode のデバッガコンソールをフル活用する形です。
1. サンプルコード準備(並列 API 呼び出し)
📄 parallel_api_debug.js
const fetch = require("node-fetch"); // Node.js 18未満の場合は npm install node-fetch
async function fetchUser(id) {
console.log("fetchUser開始:", id);
if (id <= 0) {
throw new Error(`無効なユーザーID: ${id}`);
}
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
if (!response.ok) {
throw new Error(`APIリクエスト失敗: ${response.status}`);
}
const data = await response.json();
console.log("fetchUser完了:", data.name);
return data;
}
async function main() {
const ids = [1, -1, 3]; // -1 がエラーになる
try {
// 複数 API を並列で呼び出す
const users = await Promise.all(ids.map(id => fetchUser(id)));
console.log("取得ユーザー一覧:", users.map(u => u.name));
} catch (e) {
console.error("捕捉された例外:", e.message);
console.error(e.stack);
}
}
main();
JavaScript2. ブレークポイント設定
fetchUserの最初のconsole.log("fetchUser開始:", id);if (id <= 0)の直前const users = await Promise.all(...)の行console.error(e.stack)の行
複数 await が同時に動くため、最初の停止でどの Promise がエラーを出すかを確認できます。
3. デバッグ手順
- VSCode でデバッグ開始(Launch Program)
fetchUserの最初の行で停止- デバッガコンソールで
idを確認
id
4. Promise.all の挙動を確認
Promise.allは 1つでも reject があると即座に catch に飛ぶ- デバッグコンソールで
usersを評価しても、まだ undefined - Step Over すると、最初にエラーが投げられた Promise が catch に伝播します
5. 例外の追跡
id = -1でエラー発生- デバッグコンソールで
e.message
→ "無効なユーザーID: -1"
e.stack
→ どの fetchUser 呼び出し(Promise)でエラーが起きたかが表示されます
- Step Into すると、どの行で throw が起きたかさらに詳しく追跡可能
6. デバッグコンソール活用例
並列処理中の状態確認
id // 現在処理中の fetchUser の id
typeof data
→ await が完了していない Promise の場合 undefined
users
→ Promise.all が resolve する前は undefined
🔹 変数を書き換えて挙動確認
ids[1] = 2
- Step Over で再実行すれば、エラーを回避して並列処理が成功するか確認できます
7. ポイント
- Promise.all は最初に reject が出た Promise で catch が飛ぶ
- デバッグコンソールで各変数を確認 → 並列処理の途中状態も把握できる
- Step Over / Into で非同期処理を追跡 → どの fetchUser がエラーか視覚的に理解
- stack を確認 → 並列呼び出しのどの関数が原因かを特定可能
まとめ
| ステップ | 内容 |
|---|---|
| ① | Promise.all 内の各 fetchUser にブレークポイント |
| ② | デバッグコンソールで id やデータを確認 |
| ③ | Step Over / Into で await の完了や throw を追跡 |
| ④ | エラー発生時は e.message / e.stack を確認 |
| ⑤ | 必要に応じて変数を書き換え、挙動をテスト |
この手順を使えば 複数の非同期 API 呼び出し+例外発生時の挙動 を目で追いながら確認できます。

