코드 리뷰 목록
JavaScript🤖 AI 리뷰 완료

JavaScript Promise 체인 최적화

Promise.all과 async/await를 활용한 병렬 API 호출 최적화 패턴입니다.

S
shin_js
2025-03-15
2

// 코드

JavaScript
42 lines
1// 순차 실행 (느림)
2async function sequentialFetch(userIds) {
3  const users = [];
4  for (const id of userIds) {
5    const user = await fetchUser(id); // 순차 실행
6    users.push(user);
7  }
8  return users;
9}
10
11// 병렬 실행 (빠름)
12async function parallelFetch(userIds) {
13  const promises = userIds.map(id => fetchUser(id));
14  return Promise.all(promises); // 동시 실행
15}
16
17// 에러 처리가 포함된 병렬 실행
18async function safeParallelFetch(userIds) {
19  const results = await Promise.allSettled(
20    userIds.map(id => fetchUser(id))
21  );
22
23  return results.reduce((acc, result, index) => {
24    if (result.status === 'fulfilled') {
25      acc.success.push(result.value);
26    } else {
27      acc.failed.push({ id: userIds[index], error: result.reason });
28    }
29    return acc;
30  }, { success: [], failed: [] });
31}
32
33// 동시 실행 수 제한
34async function limitedParallelFetch(userIds, limit = 3) {
35  const results = [];
36  for (let i = 0; i < userIds.length; i += limit) {
37    const batch = userIds.slice(i, i + limit);
38    const batchResults = await Promise.all(batch.map(fetchUser));
39    results.push(...batchResults);
40  }
41  return results;
42}
🤖
AI 코드 리뷰
2025-03-15
자동 분석

`limitedParallelFetch` 함수의 배치 처리 로직이 훌륭합니다. 하지만 배치 내에서 하나라도 실패하면 전체가 실패합니다. `Promise.allSettled`를 사용하는 것을 권장합니다.

// 커뮤니티 리뷰1

O
oh_js
2025-03-15
3

재시도 로직도 추가하면 완벽할 것 같습니다. 네트워크 에러 시 exponential backoff로 재시도하는 패턴을 적용해보세요.

// 리뷰 작성