B T*_*B T 26 javascript java error-handling node.js
是否有标准/最佳实践方法在javascript中添加异常原因.在java中你可能会这样做:
Throwable t = new Exception("whatever");
t.addCause(previouslyCaughtException);
throw t;
Run Code Online (Sandbox Code Playgroud)
当打印出结果异常时,它会为您提供包含原因的精美跟踪.有什么好方法可以在javascript中执行此操作,还是我必须自己滚动?
在 NodeJS 和浏览器中,现在这是可能的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause
https://nodejs.org/api/errors.html#errorcause
try {
aFunctionThatWillThrow()
} catch (err) {
throw new Error('A function that will throw did throw!', { cause: err });
}
Run Code Online (Sandbox Code Playgroud)
现在(直到有更好的答案),这就是我所做的:
...
} catch(e) {
throw new Error("My error message, caused by: "+e.stack+"\n ------The above causes:-----")
}
Run Code Online (Sandbox Code Playgroud)
我打印异常的方式使它看起来很漂亮和干净:
console.log(e.stack)
Run Code Online (Sandbox Code Playgroud)
打印这样的东西:
My error message: SomeError
<some line>
<more lines>
------The above causes:-----
<some line>
<more lines>
Run Code Online (Sandbox Code Playgroud)
如果它说"原因",那么该行可能会更好,因为首先打印导致错误的异常的堆栈跟踪.
如果您使用的是Node.js,则可以使用VError
Joyent还有一个页面讨论Node.js中错误处理的最佳实践https://www.joyent.com/developers/node/design/errors
唯一的问题是,如果传入null或未定义的参数,我不喜欢Joyent的VError实现方式.当您处理错误时,这一点尤其重要,因为它只会掩盖问题的根本原因.我已经分叉了他们的VError,因此它不会因为null或undefined参数而失败. https://github.com/naddison36/node-verror
在 prod 中,我们使用TraceError
import TraceError from 'trace-error';
global.TraceError = TraceError; // expose globally (optional)
throw new TraceError('Could not set status', srcError, ...otherErrors);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3963 次 |
最近记录: |