是否可以使用Error抛出对象?在下面的示例中,控制台显示undefined
。
try {
throw Error({foo: 'bar'});
} catch (err) {
console.log(err.message.foo);
}
答案 0 :(得分:17)
您可以抛出自己的对象,并将Error实例与其关联:
try {
// ...
throw {
foo: "bar",
error: new Error()
};
throw
语句不是挑剔的,但是Error()
构造函数是。当然,如果您抛出的不是错误,则只有在捕获环境期望它是您抛出的任何东西时才有用。
让Error对象具有一部分自定义抛出值很有用,因为构造的Error实例具有(在支持的浏览器中,目前看来基本上都是它们)关联的堆栈跟踪。
答案 1 :(得分:4)
您可以尝试将对象转换为JSON字符串,然后在catch语句中将错误消息解析为JSON对象:
try {
throw Error(JSON.stringify({foo: 'bar'}));
} catch (err) {
console.log(JSON.parse(err.message).foo);
}
答案 2 :(得分:0)
使用private void ListRappor_SelectedIndexChanged(object sender, EventArgs e)
{
var ListR = sender as Picker;
var choix=ListR.Items[ListR.SelectedIndex];
switch(choix){
}
}
和JSON.stringify()
可能会很痛苦,甚至没有必要。我建议为JSON.parse()
对象创建自己的属性,而不是将对象传递给Error
参数,该参数只接受一个字符串。
message
答案 3 :(得分:0)
对于使用typescript的任何人,您都应该扩展ErrorConstructor
接口并添加自己的可以接受对象的构造函数
class MyError extends Error {
readonly id: number
// base constructor only accepts string message as an argument
// we extend it here to accept object, allowing us to pass other data
constructor({ id, name, message }) {
super(message)
this.name = name // this property's already existed in parent
this.id = id
}
}
function doSomething() {
if (somethingWentWrong) {
throw new MyError({
id: 502,
name: "throttle_violation",
message: "Violation of backoff parameter",
});
}
}
try {
doSomething()
} catch (err) {
if (err instanceof MyError) {
console.log("error id: " + err.id);
console.log("error name: " + err.name);
console.log("error message: " + err.message);
alert(err.property); // name
} else {
// ...
}
}