new Promise를 통해 Promise 객체를 생성할 수 있다.
new Promise 생성 시, Promise를 이용해서 실행한 작업이 성공했는지, 실패했는지를 알려주는 콜백함수를 공급해줘야 한다.
위와 같이 Promise를 사용할 수 있다. 2초 후에 작업이 완료되면 Promise의 callback으로 전달된 첫 번째 파라미터에 담겨있는 함수를 호출한다. 그 후, then과 catch 등을 이용해 Promise 이후의 작업을 수행할 수 있다. 하지만, 위와 같은 방식은 잘 사용하지 않는다. 보통은 함수의 결과값으로 Promise를 반환하는 경우가 많다. 다음과 같이 말이다.
이렇게 사용하면 기존의 코드보다 훨씬 재사용성이 높아진다.
이러한 Promise는 여러 개의 비동기적인 작업들이 중첩되어 사용될 때 빛을 발휘한다.
위의 방식은 then 안에 then이 들어오는 방식이다. 위와 같은 방식을 Nesting(네이스팅) 방식이라고 한다. 이 네이스팅 방식보다는 체이닝(Chaining) 방식을 더 선호한다.
Nesting 방식보다 가독성이 높은 것을 확인할 수 있다.
이제 resolve를 reject로 변경하고 data를 ‘job1 fail’로 변경해보자.
위 처럼 변경 후 실행하면 다음과 같은 에러가 발생한다.
다음과 같이 catch를 사용하여 error 사항을 처리할 수 있다.
(catch를 사용하여 error 핸들링)
(코드 실행 결과)
코드 실행 결과를 보면 catch 다음의 then이 실행된 것을 볼 수 있다.
위 코드와 같이 catch단에서 Promise.reject로 처리를 해 준다면, catch에서 코드를 끝낼 수 있게 된다. (다음 사진 참고)
(catch단에서 끝난 상황)
참고자료
생활코딩