web/node.js

Promise에서 Unhandled Rejection 설명

반응형

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


비동기 상태에서 에러처리는 참 쉽지 않다.


반응형