파서가 포함 된 작은 Node.js 패키지를 개발 중입니다. 회복 불가능한 문제점을 감지하자마자 발생합니다.던진 객체에서 오류 이유를 전달/최신 JavaScript에서 오류를 처리하는 방법
나는 꽤 오랫동안 자바를 사용해 왔으며 많은 예외 클래스에 익숙합니다.
하지만 JavaScript입니다. 나는 그것이 스타일의 문제라고 생각한다. 내 중요한 문제는 오류 이유를 catch 블록에 전달하는 방법입니다. 각각의 문제에 대한 세부 사항을 다루는 각각의 오류 이유에 대해 다른 오류 "클래스"를 만들거나 그 이유를 속성으로 유지하는 단일 오류 클래스를 작성하려고 생각했습니다.
catch(e) {
if(e instanceof FirstError) {
...
}
if(e instanceof SecondError) {
...
}
}
catch(err) {
if(err instanceof AnError) {
if(err.detail === 'becauseOfA') {
...
}
if(err.detail === 'becauseOfB') {
...
}
}
...
}
접근 방법의 더 나은 :
은 내가 당신에게 오류의 두 가지 처리의 예를 들어 보자? 둘 다 잘될 것입니다. 그러나 나는 처음을 좋아하지 않습니다. 많은 수업이 저에게는 엄청난 오버 헤드가있는 것처럼 보입니다.
편집 : 콜백을 사용에 동의
은 (또한 here 대답) :
// One class per error type
function(err, ast) {
if(err) {
if(err instanceof FirstError) {
...
}
if(err instanceof SecondError) {
...
}
}
...
}
// One class for all errors
function(err, ast) {
if(err) {
if(err instanceof AnError) {
if(err.detail === 'becauseOfA') {
...
}
if(err.detail === 'becauseOfB') {
...
}
}
...
}
}
// No class at all
function(err, ast) {
if(err) {
if(err.detail === 'becauseOfA') {
...
}
if(err.detail === 'becauseOfB') {
...
}
...
}
}
문제가 지속 : 나는 모든 클래스를 삭제하고 프로토 타입 상속하지 않고 간단한 객체를 사용해야합니까? 오류 처리기 (catch 또는 callback 여부)에 문제에 대한 정보를 전달해야합니다.
작고 빠르기 때문에이 함수를 동기시키고 싶습니다 (예, 콜백이 비동기 함수가되지 않는다는 것을 알고 있습니다). AFAIK Node.js 자체는 비동기 함수 (fs.readFile)의 콜백에 오류 객체를 전달하면서 동기 코드 (fs.readFileSync)에 오류를 발생시킵니다.
'==='를 사용하는 경우 +1. Javascript에서'try'-'catch'es를 사용하지는 않지만 첫 번째 버전을 선호합니다. 케이스의 경우 – Kninnug
+1. 또한 js에서 가장 좋은 접근 방식이 무엇인지 궁금합니다. – lukaleli
자바에서 왔을 때, 많은 클래스를 사용하는 것을 꺼려한다는 사실에 놀랐습니다. :) 그러나 실제로 그렇게 오래되었습니다 :'var ExceptionTypeA = function() {};'? – RandomSeed