我试图用ES6和Babel扩展Error.它没有成功.
class MyError extends Error {
constructor(m) {
super(m);
}
}
var error = new Error("ll");
var myerror = new MyError("ll");
console.log(error.message) //shows up correctly
console.log(myerror.message) //shows empty string
Run Code Online (Sandbox Code Playgroud)
Error对象永远不会获得正确的消息集.
现在我已经在SO上看到了一些解决方案(例如这里),但它们看起来都非常非ES6-y.如何以漂亮的ES6方式做到这一点?(那是在Babel工作)
我们有以下TestComponent.tsTypeScript类:
01: import TestVectorLayer from './TestVectorLayer'
02:
03: export class TestComponent implements OnInit {
04: private foo: any;
05:
06: constructor() { }
07:
08: const layer = new TestVectorLayer("foo");
09: }
Run Code Online (Sandbox Code Playgroud)
并具有以下TestVectorLayer.ts功能:
请记住,OpenLayer 3正在使用Google Closure库,这就是为什么TestVectorLayer它不是TypeScript类.
01: declare let ol: any;
02:
03: const TestVectorLayer = function (layerName: string) {
04: ...
05: console.log(layerName);
06:
07: ol.layer.Image.call(this, opts);
08: }
09:
10: ol.inherits(TestVectorLayer as any, ol.layer.Image as any);
11:
12: export default TestVectorLayer;
Run Code Online (Sandbox Code Playgroud)
我们收到以下错误: …
在Java中,我将这样声明一个函数:
public boolean Test(boolean test) throws Exception {
if (test == true)
return false;
throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)
而且我可以使用此功能而无需处理异常。
如果可能,如何在Typescript中执行相同的操作?编译器会告诉我,如果没有try / catch,我将无法使用该函数。
我有 Java 开发背景,而且对 JavaScript/TypeScript 还很陌生。
是否有标准方法来管理和保留 JavaScript/TypeScript 中错误的原因?
我的目的是当我将一个 Error 包装到另一个 Error 中时获得完整的堆栈跟踪;有点像 Java 异常堆栈跟踪:
Message of exception 1
...
Caused by: Message of exception 2
...
Caused by: Message of the root exception
Run Code Online (Sandbox Code Playgroud)
我尝试了这段代码,但err1没有保留以下参考err2:
// CODE
try {
try {
throw new Error("Error no2");
} catch (err2) {
console.log("========================================");
console.log(err2);
throw new Error("Error no1");
}
} catch (err1) {
console.log("========================================");
console.log(err1);
}
Run Code Online (Sandbox Code Playgroud)
// CONSOLE OUTPUT
$ node test.ts
========================================
Error: Error no2
at …Run Code Online (Sandbox Code Playgroud)