티스토리 뷰

반응형

promise.all 은 자신이 관리하고자 하는 프로미스들의 이터러블 인자 하나를 넣으면

이터러블 내 모든 프로미스가 처리된 경우에만 프로미스 하나를 반환한다... 이때 모두 성공해야 한다. 하날도 실패하면 

promise all도 더이상 기다리지 않고 실패한다.

let one = new Promise(resolve => setTimeout(resolve, 1000, "one"));
let two = new Promise(resolve => setTimeout(resolve, 2000, "two"));
let three = new Promise(resolve => setTimeout(resolve, 3000, "three"));

Promise.all([one, two, three]).then(result => console.log('all:', result));

3초 뒤

all: [ 'one', 'two', 'three' ]

출력

 

promise.race 역시 여러개의 프로미스를 관찰한다. promise.all과 마찬가지로 프로미스 이터러블을 인자로 받고 프로미스 하나를 반환 한다. 하지만 promise.all 과 다르게 처번째 프로미스가 확정되는 즉시 promise.race 역시 확정된다.

let one = new Promise(resolve => setTimeout(resolve, 1000, "one"));
let two = new Promise(resolve => setTimeout(resolve, 2000, "two"));
let three = new Promise(resolve => setTimeout(resolve, 3000, "three"));

Promise.race([one, two, three]).then(result => console.log('race:', result));

1초뒤 

all: one

출력

 

 

만약 race 나 all에서 resolve가 아닌 reject가 실행되어서 메서드가 실패하게 될때는 

일반적인 promise와 마찬가지로 catch를 사용한다.

 

let one = new Promise((_, reject) => setTimeout(reject, 1000, "one"));
let two = new Promise(resolve => setTimeout(resolve, 2000, "two"));
let three = new Promise(resolve => setTimeout(resolve, 3000, "three"));

Promise.race([one, two, three])
.then(result => console.log('race:', result))
.catch(err => console.error('err:', err));

1초뒤

err: one

출력

'Javascript > 비동기 프로그래밍' 카테고리의 다른 글

Promise 활용1  (0) 2020.04.10
[Javascript] Promise #2  (0) 2020.04.08
[Javascript] Promise #1  (0) 2020.04.07
[Javascript] callback 활용방법  (0) 2020.04.07