[ECMAScript 6] Promise - 비동기 코드 작성하기
모든 언어가 마찬가지겠지만, 기존의 JavaScript에서는 비동기적 코드를 작성하고 관리하는 것은 크게 어려운 일이었다. node.js 에서는 콜백 을 이용하는 방식을 사용했지만, 이는 콜백 헬 이라는 새로운 문제를 만들어냈다. 이를 해결하기 위해 step 이나 async 같은 다양한 라이브러리가 나왔지만 이런 라이브러리로도 콜백 방식이 가지는 복잡도는 해결하지 못했고, 여전히 비동기 코드를 작성하는 것은 어려운 문제였다. 그래서 ECMAScript 6에서는 비동기 코드를 쉽게 작성할 수 있도록 Promise 를 표준 라이브러리에 도입하였다. Promise 는 그 이름에서도 알 수 있듯이 비동기적인 코드를 작성할 수 있도록 도와주는 promise monad 의 일종이다. Promise 는 기본적으로 생성자를 통해서 만들어진다. 이렇게 생성된 Promise 는 pending state가 된다. pending state는 아무 값도 가지지 않은 상태다. pending인 Promise 는 후에 resolved state (혹은 fulfill state) 가 되거나 rejected state가 될 수 있지만, 이 상태로는 아무것도 할 수 없다. Promise 의 상태를 바꾸기 위해서는 콜백 함수를 이용해야 한다. Promise 의 생성자는 한 개의 콜백 함수를 받는다. 이 콜백은 executor 라고 불리는데, Promise 객체를 생성하는 중에 호출된다. executor 가 호출될 때는 2개의 함수가 인자로 넘어간다. 첫 번째는 resolver 라고 불리고, 두 번째는 rejecter 라고 불린다. pending state인 Promise 의 resolver 가 호출되면 이 Promise 는 resolved state가 되고, resolver 의 인자를 값으로 지닌다. 반대로 pending state인 Promise 의 rejecter 이 호출되었다면 이 Promise 는 rejected state가 되고, rejecter 의 인자를 Promis