개발일지

[javascript] Promise(2) - all(), race() 본문

javascript

[javascript] Promise(2) - all(), race()

강강강 2021. 12. 29. 15:38

all()

- 파라미터의 모든 Promise() 처리를 완료했을 때 then() 의 핸들러 함수를 실행한다.

- Promise.all() 형태로 작성한다.

- 파라미터를 이터러블로 작성한다. : 작성한 순서대로 Promise 인스턴스 생성 

- 실행자에서 실패가 발생했을 때 : reject() 가 발생한 시점에 then() 을 실행

 

function order(delay) {
	return new Promise((resolve) => {
    	setTimeout(() => {
        	log("실행자:" + delay);
            resolve(delay);
         }, delay);
       });
   };
   Promise.all([order(500).order(300), order(100)]).then((param) => log("then:" + param));
   // 3개를 모두 실행한 후에 then() 을 한번만 호출- 이게 all()함수의 특징
   // 하나라도 reject 발생하면 then 의 첫번째 파라미터를 발생시키지 않는다.

실행결과

실행자:100
실행자:300
실행자:500
then:500,300,100

 

race()

- resolve(), reject() 와 관계없이 처음 한 번만 then() 을 실행하고 더이상 실행하지 않는다. 

 

function order(delay) {
	return new Promise((resolve) => {
    	setTimeout(() => {
        	log(delay);
            resolve(delay);
        }, delay);
     });
 };
 Promise.race([order(500), order(100), order(300)]).then((param) => log("then:" + param));

실행결과

100
then:100
300
500