JavaScript | continue文

JavaScript JavaScript
スポンサーリンク

では 部署ごとにフラグ+非同期並列処理でスキップする実務パターン を作ります。


シナリオ:部署ごとのユーザーを非同期処理、条件に合わなければ部署単位でスキップ

想定:

  • 部署ごとに API でユーザーを取得
  • 名前なし・非アクティブはスキップ
  • その部署に有効なユーザーが1人もいなければ部署単位で処理スキップ
  • 条件に合うユーザーだけ非同期処理(並列)

コード例

// 擬似API: 部署ごとのユーザー取得
async function fetchDepartmentUsers(deptName) {
  const users = [
    {name:"Alice", active:true},
    {name:"Bob", active:false},
    {name:"", active:true},
    {name:"Charlie", active:true}
  ];
  // 部署名でデータを変えてみる
  if (deptName === "開発部") users.push({name:"David", active:true});
  return users;
}

// 非同期処理関数(例: API呼び出し、DB保存など)
function processUser(user) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`処理完了: ${user.name}`);
      resolve();
    }, 300);
  });
}

// メイン処理
async function main() {
  const departments = ["営業部", "開発部", "人事部"];

  for (const dept of departments) {
    console.log(`--- ${dept} 処理開始 ---`);
    const users = await fetchDepartmentUsers(dept);

    // 部署に有効ユーザーがいるか判定するフラグ
    const validUsers = [];
    for (const user of users) {
      if (!user.name) continue;   // 名前なしはスキップ
      if (!user.active) continue; // 非アクティブはスキップ
      validUsers.push(user);
    }

    // 有効ユーザーが1人もいなければ部署単位でスキップ
    if (validUsers.length === 0) {
      console.log(`${dept} に有効ユーザーなし → スキップ`);
      continue; // 次の部署へ
    }

    // 条件を満たすユーザーのみ並列で処理
    await Promise.all(validUsers.map(user => processUser(user)));
    console.log(`--- ${dept} 処理完了 ---`);
  }

  console.log("全部署処理完了");
}

main();
JavaScript

想定出力

--- 営業部 処理開始 ---
処理完了: Alice
処理完了: Charlie
--- 営業部 処理完了 ---
--- 開発部 処理開始 ---
処理完了: Alice
処理完了: Charlie
処理完了: David
--- 開発部 処理完了 ---
--- 人事部 処理開始 ---
人事部 に有効ユーザーなし → スキップ
全部署処理完了

ポイント解説

  1. 内側ループで continue でユーザー単位のスキップ
    • 名前なし・非アクティブユーザーを処理せずスキップ
  2. フラグ(配列)で部署単位のスキップ
    • 条件を満たすユーザーが1人もいない場合、部署全体を処理せず continue
  3. 並列処理(Promise.all)で高速化
    • 部署内の有効ユーザーだけまとめて非同期処理
  4. 実務で使えるパターン
    • バッチ処理: 部署ごとのデータを条件付きで処理
    • API呼び出しや DB 保存など重い処理の回数を減らす
    • 部署単位でスキップできるので無駄な処理が発生しない

💡 応用アイデア:

  • 部署単位でログやレポート作成
  • 条件外ユーザーを別配列に集めて監査用に保持
  • 条件変更時に処理を変えたい場合でもフラグ管理で対応可能
タイトルとURLをコピーしました