컨텍스트가있는 Node.js 오류

V8 9.3 이상에서 오류 원인을 추가하는 방법

오류에 대한 추가 컨텍스트

V8 Javascript 엔진 버전 9.3부터 개발자는 기본 오류가 발생할 때 새로운 유형의 정보를 추가 할 수있는 옵션이 있습니다. 단일 인수를 제공하는 대신 오류 원인이라고도하는 일종의 오류 유형을 추가 할 수 있으므로 이러한 오류를 포착하는 핸들러가 오류가 발생한 위치를 더 잘 파악할 수 있습니다.

더 정확하게 말하면, Error-constructor는 "cause"속성을 사용할 수있는 옵션의 객체 인 두 번째 선택적 매개 변수를받습니다.

예를 살펴 보겠습니다.

/**
 * A simple demonstration how
 * the syntax will benefit from
 * the error-cause option in
 * new Errors.
 * 
 * Note that the example is greatly
 * simplified to focus on the 
 * relevant changes.
 */
async function processImage(props) {
  try {
    await minifyImage(props);
  } catch (err) {
    throw new Error('image-minification', { cause: err });
  }
  try {
    await uploadImage(props);
  } catch (err) {
    throw new Error('image-upload', { cause: err });
  }
  try {
    await cleanUpCache(props);
    await notifyUser(props);
  } catch (err) {
    throw new Error('post-processing', { cause: err });
  }
}

//
// ... later in our code ...
//

async function selectAndUploadImage(props){
  try {
    await processImage(props);
  } catch (err) {
    console.error(err.cause);
    
    switch(err) {
      case 'image-minification':
        // handle the minification error,
        // which is available by accessing
        // 'err.cause'.
        break;
      case 'image-upload':
        // ...
        break;
      case 'post-processing':
        // ...
        break;
    }
  }
}

오류 원인의 장점

오류 원인 사용의 분명한 이점은 코드에서 유사한 경우를 처리하기 위해 사용자 정의 Error 클래스를 정의 할 필요가 없다는 것입니다. 반면에 오류 원인에 대한 표준 메커니즘을 사용하면 디버깅 도구에서도 잘 작동합니다.

V8 버전 9.3 이상에서 사용 가능

현재 최신 Node.js 버전 16.4.2는 V8의 안정적인 최신 버전 인 9.1을 사용하므로이 변경 사항은 아직 공개적으로 사용할 수 없습니다. Node.js가 버전 9.3을 사용하기 시작하면 이에 따라이 문서를 업데이트하겠습니다.