비동기 작업을 가능하게 해준다.
let promise = new Promise(function(resolve, reject) {
// executor ()
});
new Promise 에 전달되는 콜백 함수를 executor(실행자) 라고 한다.
executor는 자동으로 실행된다. 처리가 끝나면 executor는 처리 성공 여부에 따라 resolve나 reject를 호출한다.
new Promise는 프로미스 객체를 반환한다. 해당 객체는 내부에 state 와 result 프로퍼티를 가진다.

let promise = new Promise(function(resolve, reject) {
// 프라미스가 만들어지면 executor 함수는 자동으로 실행된다.
// 1초 뒤에 일이 성공적으로 끝났다는 신호가 전달되면서 result는 '완료'된다.
setTimeout(() => resolve("완료"), 1000);
});

let promise = new Promise(function(resolve, reject) {
// 1초 뒤에 에러와 함께 실행이 종료되었다는 신호를 보낸다.
setTimeout(() => reject(new Error("에러 발생!")), 1000);
});
promise.then(
function(result) { /* 결과(result)를 다룬다 */ },
function(error) { /* 에러(error)를 다룬다 */ }
);