이 질문은 es6 extend를 다루는 Extended Errors do not have message or stack trace과 같지 않지만 es5를 사용하고 있습니다.확장 오류가 스택 추적 정보가 잘못됨
여기에 내 코드
test.js
function FooError(message) {
this.stack = (new Error(message)).stack;
console.log('this.stack', this.stack);
console.log('new_error_stack', (new Error(message)).stack);
console.log('after');
}
FooError.prototype = new Error;
throw new FooError("foo");
이 다음과 같은 출력 제공의 : 노드 버전을 당신의 'this.stack'을 볼 수있는 6.4 (node test.js
)
this.stack Error
at Object.<anonymous> (/tmp/test.js:7:22)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
new_error_stack Error: foo
at Error.FooError (/tmp/test.js:4:33)
at Object.<anonymous> (/tmp/test.js:9:7)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
after
/tmp/test.js:9
throw new FooError("foo");
^
Error
at Object.<anonymous> (/tmp/test.js:7:22)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
'new_error_stack'보다 똑같은 것을 보여주지는 않습니다. 예를 들어, this.stack은 require가 호출되었을 때 에러가 던져진 것처럼 스택을 보여줍니다. 또한 던져진 스택은 "잘못되었습니다".
https://stackoverflow.com/a/5251506/1993501에서 코드를 가져 왔고 instanceof FooError
을 사용하고 싶으므로 FooError.prototype = new Error
줄을 사용합니다.
'new_error_stack'은 예상되는 결과를 제공하지만 두 값이 같을 것으로 예상됩니다. https://github.com/open-xml-templating/docxtemplater/issues/245
정확히 무슨 일이 일어나고 무엇, 나는 적절한 오류 유형을 방지하고 유지할 수있는 방법 (예 : 수있는 :
이 오류 내 라이브러리의 사용자에게 매우 유용하지 않은 효과를 가지고, 해당 문제를보고 instanceof 사용)?
괄호를 사용하여이 줄의 Error 개체 선언을 둘러싸고 있지 않은 이유가 있습니까? 'new Error (message) .stack'? 그것은 그것이 다음과 같이 이상하지 않은 것처럼 나를 놀라게합니다. : (새로운 오류 (메시지)). stack', [이 링크]에있는 것처럼 (http://stackoverflow.com/questions/1382107/whats-a-good- 편도 - 확장 오류 -에서 자바 스크립트/5251506 # 5251506). – Xetnus
의도적 인 것은 아니지만 영향력이없는 것으로 보입니다. 두 구문이 동일하다고 생각합니다. 코드가 다를 수 없도록 여전히 내 게시물을 편집했습니다. – edi9999