Skip to content
Advertisement

Why when i generate an Error i am getting an String Error?

i am getting several error, that is ok, when the user reject, when the transaction was bad, and so on

but now i want to show differents message by their code error

in my service of my project i am getting this error

{code: 4001, message: 'MetaMask Tx Signature: User denied transaction', stack: '{n  "code": 4001,n  "message": "MetaMask Tx'}

this is my code

function getInformation=()=>{
try{
...
} catch (err) {
    error = err
    console.log('error', error) // error is the up message
    throw new Error(error)
  }
}

then i am using the getInformation function like this:

try{
  ...
const info= getInformation()
 } catch (error) {
          console.log('EERROR', error,error.code)

here i see the error as string

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

and error.code is undefined, why i am getting as a string and error.code as undefined?

obviously error.code is undefined because error is an string

Advertisement

Answer

The first parameter of the Error constructor expects a human-readable message, i.e. a String. This means that the object you’re passing into new Error is being ToStringed, resulting in "[object Object] ..." as the message

If you are happy with the error coming into the initial catch, simply re-throw

try {
  // ...
} catch (err) {
  console.log('error', err);
  throw err;
}

If you want to create a new custom error, you’ll need to create it by either modifying the new Error or creating your own Error class, i.e.

try {
  // ...
} catch (err) {
  console.log('error', err);
  const error = new Error(err.message);
  error.code = err.code;
  // other stuff
  throw error;
}

or

class MMError extends Error {
  constructor(message, code) {
    super(message);
    this.code = code;
    // other stuff
  }
}

// ...

try {
  // ...
} catch (err) {
  console.log('error', err);
  const error = new MMError(err.message, err.code);
  throw error;
}
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement