ES2022 新特性之 error cause

error cause 为 Error 构造器引入了第二个参数,该参数是一个带有 cause 属性的对象,可以携带底层错误的信息,而上层错误的信息由 Error 构造器的第一个参数提供。error cause 有助于进行错误链的跟踪,保留抛出错误的上下文信息。

举个例子,以前的错误处理可能是这样的:

// 方式一:很难分离出底层错误信息和自定义错误信息
function fetchData(url){
  return fetch(url).catch(err => {
    throw new Error(`can't fetch data from ${url}`,err)
  })
}
(async function(){
  try {
    await fetchData('x:x')
  } catch(e) {
    console.log(e)
  }
})()

// 方式二:需要对错误进行二次包裹
function fetchData(url){
  return fetch(url).catch(err => {
    const e = new Error(`can't fetch data from ${url}`)
    e.cause = err
    return e
  })
}
(async function(){
  try {
    await fetchData('x:x')
  } catch(e) {
    console.log(e)
    console.log('Cause by',e.cause)
  }
})()

但使用了 error cause 之后,是这样的:

function fetchData(url){
  return fetch(url).catch(err => {
    throw new Error(`can't fetch data from ${url}`,{cause:err})
  })
}
(async function(){
  try {
    await fetchData('x:x')
  } catch(e) {
    console.log(e)
    console.log('Cause by',e.cause)
  }
})()

传给 Error 构造器的第一个参数是用户自定义的上层错误信息,基于此会产生一个 error 实例,该实例作为参数会传递给 catch 块;而第二个参数的 cause 属性会挂载到 error 实例,可以将底层错误信息携带上去。

javascript
349 views
Comments
登录后评论
Sign In
·

基督教 open_mouth flushed