Promise의 정적 메서드 all, race, allSettled은 반드시 배열 형태의 인자를 전달해야 하는 것은 아닙니다.
이들 메서드는 Promise 객체의 이터러블한 배열을 전달받아 실행되지만, 이터러블한 배열이 아닌 일반적인 인자를 전달하는 경우, 이들 메서드 내부에서 배열로 변환되어 처리됩니다.
다음은 이터러블한 객체가 아닌 일반적인 인자를 전달하는 예시 코드입니다.
// all 메서드에 Promise 객체와 일반 값들을 전달하는 예시
const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.resolve(3);
Promise.all(promise1, promise2, promise3).then((values) => {
console.log(values); // [1, 2, 3]
});
// race 메서드에 Promise 객체와 일반 값들을 전달하는 예시
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve(2), 1000);
});
Promise.race(promise1, promise2).then((value) => {
console.log(value); // 1
});
// allSettled 메서드에 Promise 객체와 일반 값들을 전달하는 예시
const promise1 = Promise.resolve(1);
const promise2 = Promise.reject(new Error('reject'));
const promise3 = Promise.resolve(3);
Promise.allSettled(promise1, promise2, promise3).then((results) => {
console.log(results);
// [
// { status: 'fulfilled', value: 1 },
// { status: 'rejected', reason: Error: reject },
// { status: 'fulfilled', value: 3 }
// ]
});
위 예시 코드에서 Promise.all(), Promise.race(), Promise.allSettled() 메서드에 배열 대신 개별적인 인자를 전달하였으나, 이들 메서드 내부에서는 각각의 인자들을 배열로 묶어 처리하였습니다. 따라서 배열 형태의 이터러블한 객체가 아니어도, 이들 메서드에 인자를 전달하여 사용할 수 있습니다.