微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-兑现承诺后传递错误

嗨,我是新手,如果我的问题表达不正确,请对不起.

我想在全局函数中定义axios js的承诺.
在这里,我要全局处理/捕获401状态并注销用户.
我不想在每个查询中处理它.

这是我的源全局函数来处理请求:

export function requestData (url, payload = {}) {
  return axios.post(url, payload)
    .then(response => {
      return response.data
    })
    .catch(error => {
      if (error.response.status === 401) {
        logout()
      } else {
        return error
      }
    })
}

这是我在控制器上使用的示例函数

requestData('/api/persons', {options: this.options, search: search})
  .then(data => {
    this.data = data
  })
  .catch(error => {
    this.error = error.toString()
  })

我的问题是,发生异常时,控制器中的promise catch不会触发.如何实现呢?

解决方法:

用抛出错误代替返回错误是成功的一半.
当我说对了,promise catch中的throw错误将不会调用一个promise .catch语句.这将在.then语句中起作用.

这样,它应该可以工作:

export function requestData (url, payload = {}) {
  return axios.post(url, payload)
    .then(response => {
      return response.data
    })
    .catch(error => {
      if (error.response.status === 401) {
        logout()
      } else {
        return error
      }
    })
   .then(result => {
      if (result instanceof Error) {
        throw result
      } else {
        return result
      }
    })
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐