Promise
비동기 함수를 동기 처리하기 위해 고안한 객체
비동기 작업이 완료된 이후에 다음 작업을 연결시켜 진행할 수 있다.
작업 결과 따라 성공 또는 실패를 리턴하며 결괏값을 전달받을 수 있습니다.
* Promise 자체는 동기이다 하지만 그 뒤의 then이 비동기로 동작하기 때문에 비동기 취급
// callback 패턴
function delay(sec, callback) {
setTimeout(() => {
callback("callback 패턴 " + new Date());
}, sec * 1000);
}
delay(1, (result) => {
console.log(1, result);
console.log("=============================================");
});
----------------------------------------------------------------------------------------
// promise 패턴
function delayP(sec) {
// resolve : 할일을 다 했을때 호출 , reject: 할일을 하다가 예외 발생시 호출
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise 패턴 " + new Date());
}, sec * 1000);
});
}
delayP(1)
.then((result) => {
console.log(1, result);
return delayP(1);
})
.then((result) => {
console.log(2, result);
return delayP(1);
})
.then((result) => {
console.log(3, result);
return "promise 끝";
})
.then((result) => {
console.log(result);
});
/** resolve를 호출 > resolve를 통해 어떤 결과 값을 넘기게 되면
그 결과값을 then 예외가 없을시에 받은값을 그 함수에게 넘겨 준다
(여기서는 result에 담겨서 console.log에 찍히는것)
**/