Promise.all / Promise.allSettled

mangojang·2022년 3월 31일
0
post-custom-banner

본 글은 글쓴이가 꺼내보기 위함의 목적이 큰 글입니다 :)

Promise.all[ promises...]

  • promise 함수를 한꺼번에 실행 할 수 있음.
  • 실행한 promise 중 하나라도 reject가 나온다면 결과값이 하나도 나오지 않음.
  • 하나 실패하면 전체 다 다시 시도해야함.

사용패턴

const promise1 = new Promise((reolve,reject) => {
	return setTimeout(()=>{
		return resolve(1)
	},1000)
})

const promise2 = new Promise((reolve,reject) => {
	return setTimeout(()=>{
		return resolve(2)
	},1000)
})

Promise.all([ promise1, promise2 ])
.then(results => {
	console.log(results); // 결과값 : [1,2]
})
.catch(err =>{
	console.log(err);
})

Promise.allSettled[promises...]

  • promise 함수를 한꺼번에 실행 할 수 있음.
  • 결과 값은 promise 배열 순서대로 나옴.
  • 실행한 promise 중 reject가 나온것은 실패했다고, 성공한 것은 성공 한대로 결과값이 나옴.
    • 값의 형태는 성공시 - {status:"fulfilled", value:result} , 실패시 - {status:"rejected", reason:error}
  • reject가 된것만 추릴 수 있어, 따로 실패한것만 분기처리(status 로 분기)하여 다시 시도할 수 있음.
  • 구형 브라우저, node.js 에서는 폴리필이 필요함.

사용패턴

const promise1 = new Promise((reolve,reject) => {
	return setTimeout(()=>{
		return resolve(1)
	},1000)
})

const promise2 = new Promise((reolve,reject) => {
	return setTimeout(()=>{
		return reject(new Error('error!!'))
	},1000)
})

Promise.allSettled([ promise1, promise2 ])
.then(results => {
	console.log(results); 
// 결과값 : [{status: 'fulfilled', value: 1},{status: 'rejected', reason: 'error!!'}]
	if (results.status == "fulfilled") {
    // 성공했을 경우 
  }
  if (results.status == "rejected") {
    // 실패했을 경우
  }
})
.catch(err =>{
	console.log(err);
})

참고문헌

https://ko.javascript.info/promise-api

profile
한 걸음 한 걸음 계속 걷는 자가 일류다
post-custom-banner

0개의 댓글