gpt4 book ai didi

javascript - 在 es6 中有没有一种方法可以从 Error 继承并且在堆栈跟踪中没有构造函数?

转载 作者:行者123 更新时间:2023-11-30 11:50:57 27 4
gpt4 key购买 nike

我试图通过扩展错误来编写一个 HTTPError 类:

class HTTPError extends Error {
constructor(codeArg, message){
let code = codeArg || 500;
super(message || http.STATUS_CODES[code]); // first line in stack trace
this.code = code;
}
}

这大部分工作正常,但是当我 throw 这样的错误时,调用 super 的行是堆栈跟踪中的第一行(假设是 nodejs):

> const HTTPError = require('./HTTPError')
undefined
> let e = new HTTPError(418)
undefined
> throw e
Error: I'm a teapot
at HTTPError (/home/pat/Scripts/js/HTTPError.js:6:6)
at repl:1:9
at sigintHandlersWrap (vm.js:32:31)
at sigintHandlersWrap (vm.js:96:12)
at ContextifyScript.Script.runInContext (vm.js:31:12)
at REPLServer.defaultEval (repl.js:308:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:489:10)
at emitOne (events.js:101:20)
> e.code
418

堆栈跟踪的第一行在 HTTPError 的构造函数中。有趣的(创建它的地方)是第二行 repl:1:9。有解决办法吗?

最佳答案

Error.captureStackTrace应该能够解决这个问题,尽管它不是标准的 ES6。

class HTTPError extends Error {
constructor(codeArg, message){
let code = codeArg || 500;
super(message || http.STATUS_CODES[code]);
Error.captureStackTrace(this, new.target);
this.code = code;
}
}

最终我会称它为 Error 构造函数中的错误,但这不是必需的。目前还没有堆栈跟踪标准,因此这完全是依赖于实现的行为。

关于javascript - 在 es6 中有没有一种方法可以从 Error 继承并且在堆栈跟踪中没有构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com