Thief of Wealth

function add5(num) {
	return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(num + 5);
		  resolve(num + 5);
    }, 2000)
		
	})
}

Promise.all(
[add5(1), add5(2), add5(3)]
).then(result => {
	console.log(result)
})

// [6,7,8]

여러가지 비동기 작업을 병렬로 처리하고 싶을 때 사용하는 것이 Promise.all이다. 배열로 인자를 주게되면, 배열에 있는 모든 Promise들이 거의 동시에 트리거된다.

즉, 위 코드는 add5를 3개 실행하여 총 6초가 걸리는 것이 아니라 2초만에 3개의 비동기 작업이 완료된다.

그리고 결과값은 배열로, Promise 순서대로 담기게 된다.

function add5(num) {
	return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(num + 5);
		  resolve(num + 5);
    }, 2000)
		
	})
}

Promise.race(
[add5(1), add5(2), add5(3)]
).then(result => {
	console.log(result)
})

// 6

반면에 race는 배열로 받은 Promise중 가장 빨리 응답을 받은 결과만 resolve한다. (모든 Promise가 실행되긴한다.)

이는 에러가 발생할 때에도 마찬가지이다. 모든 프로미스가 실행되나, 가장 빨리 응답한 에러만 다음 구문으로 넘어갈 수 있다.

profile on loading

Loading...