new Promise((resolve1, reject) => {
reject('break!')
// throw new Error("에러 발생!");
// new Promise((resolve2, reject) => {
// console.log("promise 1");
// setTimeout(resolve2, 1000);
// }).then(resolve1);
}).then(() => {
console.log("promise 2");
}).catch((e)=>console.log("error : ", e))
then을 써두고 promise를 return할거라고 예상했는데, return을 하지 않으면 어떻게하지?
그리고 로직이 중간에 끊겼는데 promise chain에서 어떻게 빠져나갈 수 있을까?
(() => {
return null; // <- error
return new Promise((resolve, reject) => {
console.log("promise 1");
setTimeout(resolve, 1000);
})
})().then(() => {
console.log("promise 2");
});
promise를 빠져나가보자!
첫 번째 시도, Error를 날리자
하지만 catch에 안걸려서 fail
(() => {
throw new Error("에러 발생!");
return null;
return new Promise((resolve, reject) => {
console.log("promise 1");
setTimeout(resolve, 1000);
})
})().then(() => {
console.log("promise 2");
}).catch((e)=>console.log("error : ", e))
두 번째 시도, Error를 날리는데 가장 위에 객체도 promise로 만들자
그러니 성공!
new Promise((resolve, reject) => {
throw new Error("에러 발생!");
}).then(() => {
console.log("promise 2");
}).catch((e)=>console.log("error : ", e))
마지막, 그럼 맨 처음 구조에다가 error를 날리는 부분을 합치면!
끝
new Promise((resolve1, reject) => {
// throw new Error("에러 발생!");
new Promise((resolve2, reject) => {
console.log("promise 1");
setTimeout(resolve2, 1000);
}).then(resolve1);
}).then(() => {
console.log("promise 2");
}).catch((e)=>console.log("error : ", e))
근데 생각해보니 일반 function이 아니라 promise를 사용할거면 그냥 reject를 쓰면 되는데...
new Promise((resolve1, reject) => {
reject('break!')
// throw new Error("에러 발생!");
// new Promise((resolve2, reject) => {
// console.log("promise 1");
// setTimeout(resolve2, 1000);
// }).then(resolve1);
}).then(() => {
console.log("promise 2");
}).catch((e)=>console.log("error : ", e))
번외.
promise에서 catch는 가장 가까운 것이 동작한다고 했는데
위 구조에서 속에 promise에서 error가 발생해도 밖에 promise의 catch에 걸릴까?
new Promise((resolve1, reject) => {
new Promise((resolve2, reject) => {
console.log("promise 1");
throw new Error("에러 발생!");
setTimeout(resolve2, 1000);
}).then(resolve1);
}).then(() => {
console.log("promise 2");
}).catch((e)=>console.log("error : ", e))
정답은 catch에 안걸리고 진짜 에러가 된다.
'소프트웨어 > javascript' 카테고리의 다른 글
javascript로 linked list 만들기 (느낌대로) (0) | 2019.03.07 |
---|---|
[javascript] clock 만들기 (0) | 2016.06.07 |