14.3.1 프로미스 만들기
프로미스는 쉽게 만들 수 있습니다.
resolve(성공)와 reject(실패) 콜백이 있는 함수로 새 Promise 인스턴스를 만들기만 하면 됩니다.
countdown 함수를 고쳐 봅시다.
매개변수를 받게 만들어서 5초 카운트다운에 매이지 않게 하고, 카운트 다운이 끝나면 프로미스를 반환하게 하겠습니다.
function countdown(seconds) {
return new Promise(function(resolve, reject) {
for (let i=seconds; i>=0; i--) {
setTimeout(function() {
if (i>0) console.log(i + '...');
else resolve(console.log("GO!"));
}, (seconds-i)*1000);
}
})
}
이대로라면 별로 좋은 함수는 아닙니다.
너무 장황환 데다가, 콘솔을 아예 쓰지 않기를 원할 수도 있습니다.
웹 페이지에서 카운트다운이 끝나면 페이지 요소를 업데이트하는 목적에 쓰기도 별로 알맞지 않아 보입니다.
하지만 이제 시작일 뿐이고, 프로미스를 어떻게 만드는지는 잘 드러나 있습니다.
resolve
와 reject
는 함수입니다.
resolve
를 여러 번 호출하면 프로미스의 프로미스 같은 걸 만들 수 있지 않을까 하는 생각이 들 수도 있지만, resolve나 reject를 여러 번 호출하든, 섞어서 호출하든 결과는 같습니다.
첫 번재로 호출한 것만 의미가 있습니다.
프로미스는 성공 또는 실패를 나타낼 뿐입니다.(현재 이 함수에는 실패 부분이 없습니다만).