JavaScript | continue文

JavaScript JavaScript
スポンサーリンク

では 大量データ+非同期処理+continue で高速処理 の実務的パターンを紹介します。


シナリオ:大量ユーザーを非同期で処理しつつ、条件外はスキップ

ポイント:

  • データが多いので、順番に await すると遅い
  • 条件に合うユーザーだけ処理する
  • Promise.all と組み合わせて並列処理で高速化

実装例

// 擬似APIデータ生成(大量ユーザー)
function generateUsers(n) {
  return Array.from({length:n}, (_, i) => ({
    id: i + 1,
    name: i % 5 === 0 ? "" : `User${i+1}`, // 5の倍数は名前なし → スキップ
    active: i % 7 !== 0                      // 7の倍数は非アクティブ → スキップ
  }));
}

// 擬似非同期処理(API呼び出しやDB保存など)
function processUser(user) {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`処理完了: ${user.name}`);
      resolve();
    }, 50); // 短時間で模擬
  });
}

async function main() {
  const users = generateUsers(20); // 20人分データ(実務は数千~万でも同じ)

  // 条件を満たすユーザーだけ配列に絞る
  const validUsers = [];
  for (const user of users) {
    if (!user.name) continue;   // 名前なしスキップ
    if (!user.active) continue; // 非アクティブスキップ
    validUsers.push(user);
  }

  // 並列で非同期処理
  await Promise.all(validUsers.map(user => processUser(user)));

  console.log("全ユーザー処理完了");
}

main();
JavaScript

出力例(順序は並列処理のため前後することがあります)

処理完了: User1
処理完了: User2
処理完了: User3
処理完了: User4
処理完了: User6
処理完了: User8
...
全ユーザー処理完了

ポイント解説

  1. continue は順番に条件をスキップするのに便利
    • 名前が空や非アクティブなユーザーは処理リストに入れない
    • これにより、重い非同期処理に送らない
  2. Promise.all で並列処理
    • 条件を満たしたユーザーのみを配列に集め、まとめて非同期処理
    • 順番に await するより高速化
  3. 実務的ユースケース
    • 大量データのバッチ処理(DB保存、メール送信、API呼び出し)
    • 条件に合わないデータは処理せずスキップ
    • 条件に合うデータだけを効率的に並列処理

💡 応用アイデア

  • 部署やグループ単位で条件フィルタ+並列処理
    → 部署ごとに continue でスキップして、条件を満たすユーザーだけ並列処理
  • ログやエラーハンドリングと組み合わせ
    → スキップした理由をログに残すなど、監査対応も可能
タイトルとURLをコピーしました