throw new Error('message')
还可能要带code,reason等字段,要怎么传过去。
你可以抛出具体的对象:
try {
throw {code: '', reason: ''}
}catch(err) {
console.log(err.code, err.reason)
}
如果要用Error
可以:
try {
throw new Error(JSON.stringify({code: '', reason: ''}))
}catch(err) {
const res = JSON.parse(err.message)
console.log(res.code, res.reason)
}
直接:
throw message + code + reason
不过要保证全是字符串
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refer...
比如我这样?
var msg = 'This is error message', code = 0, reason = 'Error reason information'
throw new Error(`${msg}\n code:${code}\n reason:${reason}`)
// Uncaught Error: This is error message
// code:0
// reason:Error reason information
建议你可以这样处理:
throw new Error({ message: '自定义错误消息', customParam: '自定义参数' });
例如:hrow new Error({ message: message1, code: 'code1',reason : reason1 });当这个Error对象被捕获时,可以通过访问message、code和reason来获取这些自定义参数的值。
或者你也可以深入的了解一下throw new Error:https://segmentfault.com/a/1190000021963886
刚看到楼上的方法,真的强,强烈建议使用楼上的继承方法
6 回答3k 阅读✓ 已解决
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
继承
Error
本身就是一个类先说下其他方案的问题:
既有堆栈又有各种灵活性,就是自己继承一个自定义
Error
了题主就可以
new MyError('xxx错误', {code,reason})
,获取err.data.code,err.data.reason
上面是公用代码,题主可以按照自己需求封装
比如接受多个参数
new MyError('xxx错误', code, reason)
还有一种,
Error
不就是对象吗,直接加属性就行了:完整的ts代码:
实测在一些babel转换中es6的class会被转成es5,在继承Error的时候会丢失一些属性,就不能只是简单的上面那种几行代码继承,加了一些修复的属性丢失的代码: