콜백 지옥의 문제점을 해결하기 위해 ES6에서 도입되면서 등장하였다.
new Promise
생성자로 생성할 수 있으나, 일반적으로 fetch 함수를 사용하면서 많이 접하게 된다.const promise = new Promise((resolve, reject) => {
if (){
resolve("success");
} else {
reject("fail");
}
});
대표적으로 콜백함수를 활용하는 예시로서, 우리가 자주사용하는 Array.filter()
메서드가 있다.
function fn() {
console.log('하나');
setTimeout(() => console.log('둘'), 0);
console.log('셋');
}
fn(); // 결과 순서 => '하나', '셋', '둘'
function fn() {
setTimeout(() => {
console.log('하나');
setTimeout(() => {
console.log('둘');
setTimeout(() => {
console.log('셋');
}, 0);
}, 0);
}, 0);
}
fn(); // 결과 순서 => '하나', '둘', '셋'
function fn() {
new Promise((resolve, reject) => {
console.log('하나');
// 실패인 경우 reject() 함수를 호출하면 된다.
// 그러면 then()을 건너뛰고 catch()가 실행된다.
resolve();
})
.then(() => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('둘');
resolve();
}, 0);
});
})
.then(() => {
console.log('셋');
})
.catch((err) => {
console.log('err ', err);
});
}
try {
setTimeout(() => {throw new Error('Error');}, 1000);
} catch (e) {
// 에러캐치하지 못함
console.error(e);
}