[英]Why when i generate an Error i am getting an String Error?
我收到了幾個錯誤,沒關系,當用戶拒絕時,當交易不好時,等等
但現在我想通過他們的代碼錯誤顯示不同的消息
在我的項目服務中,我收到了這個錯誤
{code: 4001, message: 'MetaMask Tx Signature: User denied transaction', stack: '{\n "code": 4001,\n "message": "MetaMask Tx'}
這是我的代碼
function getInformation=()=>{
try{
...
} catch (err) {
error = err
console.log('error', error) // error is the up message
throw new Error(error)
}
}
然后我像這樣使用getInformation function:
try{
...
const info= getInformation()
} catch (error) {
console.log('EERROR', error,error.code)
在這里,我將錯誤視為字符串
EERROR Error: [object Object]
at _callee$ (PWDService.js?9579:13)
at tryCatch (runtime.js?96cf:62)
at Generator.invoke [as _invoke] (runtime.js?96cf:296), undefined
並且error.code
是未定義的,為什么我得到一個字符串而error.code
是未定義的?
顯然error.code
是未定義的,因為 error 是一個字符串
Error
構造函數的第一個參數需要一個人類可讀的消息,即一個字符串。 這意味着您傳遞給new Error
的object正在被ToString
編輯,導致"[object Object]..."
作為消息
如果您對最初捕獲的錯誤感到滿意,只需重新拋出
try {
// ...
} catch (err) {
console.log('error', err);
throw err;
}
如果要創建新的自定義錯誤,則需要通過修改new Error
或創建自己的錯誤 class來創建它,即
try {
// ...
} catch (err) {
console.log('error', err);
const error = new Error(err.message);
error.code = err.code;
// other stuff
throw err;
}
或者
class MMError extends Error {
constructor(message, code) {
super(message);
this.code = code;
}
}
// ...
try {
// ...
} catch (err) {
console.log('error', err);
const error = new MMError(err.message, err.code);
throw err;
}
@react1,您始終可以通過執行類似於下面的操作來重建錯誤並查看其所有屬性,
try {
// ...
} catch (err) {
let errObject = Object.assign({}, err)
// console.log(errObject) to see what's there and what you can use
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.