reduceAsync
배열을 비동기 리듀서 함수로 단일 값으로 합쳐요.
typescript
const result = await reduceAsync(array, reducer, initialValue);레퍼런스
reduceAsync(array, reducer, initialValue)
배열의 각 요소를 순차적으로 처리해서 하나의 값으로 합칠 때 reduceAsync를 사용하세요. 리듀서 함수는 왼쪽에서 오른쪽으로 각 요소에 순차적으로 적용되며, 이전 호출의 누적 결과를 다음 호출로 전달해요.
typescript
import { reduceAsync } from 'es-toolkit/array';
// 각 숫자에 대해 비동기 값을 가져와서 합산해요.
const numbers = [1, 2, 3, 4, 5];
const sum = await reduceAsync(numbers, async (acc, n) => acc + (await fetchValue(n)), 0);
// 반환: 모든 가져온 값의 합계
// 배열을 객체로 변환해요.
const users = [{ id: 1 }, { id: 2 }, { id: 3 }];
const userMap = await reduceAsync(
users,
async (acc, user) => {
const details = await fetchUserDetails(user.id);
acc[user.id] = details;
return acc;
},
{} as Record<number, any>
);
// 반환: { 1: {...}, 2: {...}, 3: {...} }다른 비동기 배열 메서드와 달리 reduceAsync는 각 요소를 순차적으로 처리해야 하므로 동시 실행을 지원하지 않아요. 이전 단계의 결과가 다음 단계에 필요하기 때문이에요.
파라미터
array(readonly T[]): 합칠 배열이에요.reducer((accumulator: U, currentValue: T, currentIndex: number, array: readonly T[]) => Promise<U>): 각 요소를 처리하는 비동기 함수예요. 누적된 값과 현재 값을 받아서 새로운 누적 값을 반환해요.initialValue(U): 누적 값의 초기값이에요.
반환 값
(Promise<U>): 최종 누적 값의 프로미스를 반환해요.
reduceAsync(array, reducer)
초기값 없이 배열을 합칠 때는 첫 번째 요소가 초기값으로 사용되고, 두 번째 요소부터 리듀서 함수가 적용돼요.
typescript
import { reduceAsync } from 'es-toolkit/array';
// 초기값 없이 합계 계산해요.
const numbers = [1, 2, 3, 4, 5];
const sum = await reduceAsync(numbers, async (acc, n) => acc + n);
// 반환: 15 (1 + 2 + 3 + 4 + 5)
// 빈 배열은 undefined를 반환해요.
const emptyArray: number[] = [];
const result = await reduceAsync(emptyArray, async (acc, n) => acc + n);
// 반환: undefined빈 배열에 초기값 없이 reduceAsync를 호출하면 undefined를 반환해요.
파라미터
array(readonly T[]): 합칠 배열이에요.reducer((accumulator: T, currentValue: T, currentIndex: number, array: readonly T[]) => Promise<T>): 각 요소를 처리하는 비동기 함수예요. 누적된 값과 현재 값을 받아서 새로운 누적 값을 반환해요.
반환 값
(Promise<T | undefined>): 최종 누적 값의 프로미스를 반환해요. 배열이 비어있으면 undefined를 반환해요.

