Promise - state

1. Promise의 3가지 상태

  • promise 객체는 ‘상태'를 가지고 있습니다.
    • Pending(대기) : 비동기 처리 로직이 완료되지 않은 상태
    • FulFilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
    • Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태
let promise = new Promise(function(resolve, reject) {
    setTimeout(function() {
      console.log('before', promise)
      resolve(1);
      console.log('after', promise);
    }, 1000);
});

promise.then(function(data) {
    console.log(data);
});
  • promise객체를 console.log()로 불러오면 상태 값이 나옵니다.스크린샷 2022-02-17 오후 3.19.07.png

Promise - 에러 처리

1. 에러 처리 - reject

  • then의 2번째 인자가 reject이니까 그렇게 해도 됩니다. 하지만...
  • .catch으로 받으면 가독성이 더 좋으니까 그렇게 써 봐요.
promise
	.then(function() {})
	.catch(function(err) {console.log(err);});
  • 아래의 경우는 4가 아니고 5까지 뜹니다.
job()
	.then(function() {
    console.log(1);
	})
	.then(function() {
    console.log(2);
	})
	.then(function() {
    console.log(3);
	})
	.catch(function() {
    console.log(4);
	})
	.then(function() {
    console.log(5);
	});
  • Promise Chaining...

Promise - 마무리

1. 기타

  • promise.finally()
  • es6는 Can I Use에서 봤을때 ie는 지원하지 않습니다.

2. promise.all()

  • 여러 프로미스를 모두 성공시킨 후 완료 로직을 실행하고 싶은 경우
Promise.all([
  new Promise(resolve => setTimeout(() => resolve(1), 9000)), // 1
  new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2
  new Promise(resolve => setTimeout(() => resolve(3), 1000))  // 3
]).then(function(value) {
	console.log(value);
});
  • 9초 뒤 1, 2, 3
Last modified: 2022년 02월 17일

Comments

Write a Reply or Comment

Your email address will not be published.