오류에 대한 추가 컨텍스트
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을 사용하기 시작하면 이에 따라이 문서를 업데이트하겠습니다.