簡體   English   中英

為什么當我生成錯誤時我收到字符串錯誤?

[英]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 Errorobject正在被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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM