callback보다 가독성이 좋다. 그리고 내부적으로 예외처리에 대한 구조가 탄탄하기 때문에 오류가 발생했을 때 오류 처리 등에 대해 보다 가시적으로 관리해 줄 수 있는 장점이 있다.
Promise는 비동기 작업이 성공했는지 혹은 실패했는지를 나타내는 하나의 오브젝트이다. Promise 객체는 비동기 연산을 수행하고, 연산이 종료되면 결과를 알려주기 위해 사용된다. 비동기 연산결과를 알려주겠다고 '약속'한다고 생각하면 된다.
new Promise에 전달되는 함수는 executor(실행자, 실행함수)라고 부른다. executor는 new Promise가 만들어질때 자동으로 실행된다.
이는 최종 결과를 바로 반환하지 않고, 비동기 연산이 종료된 후 결과값이나 실패 이유를 처리하기 위해 사용된다. 성공여부를 알려면 '.then()'메소드를 사용해야한다.
Promise는 3가지 상태를 가질수 있다.
상태는 처음에 "pending"(보류)이었다가 resolve가 호출되면 "fulfilled", reject가 호출되면 "rejected"로 변한다.
결과는 처음에 undefined이었다가 resolve(value)가 호출되면 value로, reject(error)가 호출되면 error로 변한다.
executor의 인수는 2개가 있다. resolve 함수 & reject 함수 (JavaScript가 자체 제공하는 callback이다.)
비동기 작업을 마친 뒤 성공하면 첫번째 parameter인 resolve함수를 호출 하고, 실패하면 두번째 parameter인 reject 함수를 호출한다.