JavaScript에서 프로미스 배열 작업하기
지금은 프로미스 배열을 작업할 수 있게 해주는
두 가지 유용한 메서드를 살펴보겠습니다.
Promise.all 메서드는 배열 형태로 전달된
모든 프로미스가 종료된 후 코드를 실행하도록 하고,
Promise.race 메서드는 배열에서 첫 번째
프로미스가 로드될 때까지 기다리며 나머지는 버립니다.
두 메서드 모두 결과로 새로운 프로미스를 반환합니다.
Promise.all 메서드의 경우, 이 프로미스의 결과는
전달된 모든 프로미스의 결과 배열이 됩니다(결과의 순서는
배열 내 프로미스의 순서와 일치함).
Promise.race의 경우, 첫 번째 실행된 프로미스의
결과가 됩니다.
실제로 살펴보겠습니다. 프로미스 배열이 있다고 가정합시다:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Promise.all를 사용하여 우리 배열의
모든 프로미스 로드가 완료될 때까지 기다려봅시다:
Promise.all(promises).then(function(res) {
console.log(res); // 모든 프로미스의 결과인 [1, 2, 3]을 출력합니다.
});
이제 Promise.race를 사용하여
프로미스 중 첫 번째 로드가 완료될 때까지 기다려봅시다:
Promise.race(promises).then(function(res) {
console.log(res); // 첫 번째 실행된 프로미스의 결과인 1을 출력합니다.
});
배열의 프로미스 중 하나라도 거부되면,
결과 프로미스는 즉시 rejected 상태로
전환됩니다. 따라서 발생한 예외는 여러분이 이미 배운
일반적인 방법, 예를 들어 catch를 통해
잡을 수 있습니다:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
프로미스를 반환하는 함수를 만드세요. 함수 내부에는
1초에서 10초 사이의 임의 지연이 설정되어야 합니다.
프로미스는 결과로 이 지연 시간을 반환해야 합니다.
반복문과 여러분의 함수를 사용하여 배열을
10개의 프로미스로 채우세요.
이전 작업의 프로미스 배열을 사용하여 콘솔에 첫 번째로 실행된 프로미스의 결과가 출력되도록 하세요.
이전 작업의 프로미스 배열을 사용하여 콘솔에 모든 프로미스 결과의 합계가 출력되도록 하세요.