반응형
Rejection은 프로미스에서 발생하는 에러를 칭한다. Es6에서는 비동기 동작의 상태 표현으로 "pending", "fulfilled", "rejected" 세가지가 정의 되었다.
pending은 비동기 작업중인 것을 나타내고 fulfilled는 비동기 동작이 완료된것을 표현한다. 그리고 rejected는 비동기가 실패한 것을 표현해준다.
promise에서 작업이 성공할 경우에는 resolve를 실행하고 실패할 경우에는 reject를 수행한다.
그럼 Promise에서 에러가 발생했을 때는 어떻게 처리하는게 좋을 까?
대부분은 에러가 발생했을 때는 promise chaining을 사용해서 .catch(err => { } );로 잡을 수 있다.
그럼 이런 경우에도 정상적으로 잡힐까?
1 2 | new Promise((_, reject) => reject(new Error('woops'))). catch(error => { console.log('caught', err.message); }); | cs |
잡히지 않고 결국 Unhandled 에러가 발생한다. 왜 그럴까? 대부분은 error로 잡힐꺼 같은데 안잡히는 이유가 몰까? 이 이유는 우리가 잡으려고 했던 error 더 위에서 발생하는 것이기 때문에 reject에 catch를 설정을 해줘야 문제없이 처리가 가능하다.
1 2 3 4 5 6 7 8 9 | new Promise((_, reject) => reject(new Error('woops'))). catch(error => new Promise((resolve, reject) => { sentry.captureMessage(error.message, function(error) { if (error) { return reject(error); } resolve(); }); })); | cs |
비동기 상태에서 에러처리는 참 쉽지 않다.
반응형
'web > node.js' 카테고리의 다른 글
sequelize에서 timezone 설정 추가 (1) | 2018.11.26 |
---|---|
node.js oauth2 server 만들기 (1) | 2018.11.25 |
node js에서 stream pipe 사용시 에러 처리 방법 (0) | 2018.11.09 |
node.js에서 sharp를 사용해서 이미지 크기 변경하기 (0) | 2018.10.22 |
maxmind의 geoLite2를 이용해서 접속한 사용자의 지역정보 가져오기 (0) | 2018.10.16 |