では 大量データ+非同期処理+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
...
全ユーザー処理完了
ポイント解説
continueは順番に条件をスキップするのに便利- 名前が空や非アクティブなユーザーは処理リストに入れない
- これにより、重い非同期処理に送らない
Promise.allで並列処理- 条件を満たしたユーザーのみを配列に集め、まとめて非同期処理
- 順番に
awaitするより高速化
- 実務的ユースケース
- 大量データのバッチ処理(DB保存、メール送信、API呼び出し)
- 条件に合わないデータは処理せずスキップ
- 条件に合うデータだけを効率的に並列処理
💡 応用アイデア
- 部署やグループ単位で条件フィルタ+並列処理
→ 部署ごとにcontinueでスキップして、条件を満たすユーザーだけ並列処理 - ログやエラーハンドリングと組み合わせ
→ スキップした理由をログに残すなど、監査対応も可能
