从 catch 块中获取“未捕获(承诺中)错误”

Adr*_*ian 5 javascript async-await ecmascript-6

我遇到了一个奇怪的错误,我已经为此苦苦挣扎了将近一天。看来我拒绝的承诺并没有被我的catch障碍所束缚。es6 async我对和有点陌生await;然而,它看起来与我在 C# 中习惯的非常相似。

Get: async function (request, cancelToken = null) {
console.info('Sending GET', request)
store.commit('global/setLoader', true)
let headers = getAuthTokenHeader()
try {
  var res = await Vue.axios({
    url: baseUrl + request.Url,
    params: request.Params,
    method: 'GET',
    headers
  }).catch(function (error) {
    console.error('Failed to GET: ' + error)
    if (typeof error.response !== 'undefined' && typeof error.response.data !== 'undefined' && error.response.data !== null) {
      throw new Error(error.response.data)
    } else {
      throw error
    }
  })
  console.info('Request received', res)
  return res
} finally {
  store.commit('global/setLoader', false)
}
},  
Run Code Online (Sandbox Code Playgroud)

错误就抛出来了if (typeof error.response !== 'undefined' && typeof error.response.data !== 'undefined' && error.response.data !== null) {

根据https://javascript.info/async-await#error-handling
我不应该收到这个“Ucaught(承诺)”错误,因为我将整个异步调用包装在一个await.

调用代码也在等待此代码。这里是呼吁参考。

static async GetPackagingDimensions (input, Id) {
const request = {
  Url: 'api/packing/getPackagingBoxDimensionsByBarCode',
  Params: {
    boxBarcode: input,
    orderId: Id
  }
}
const res = await HttpUtil.Get(request)
return res
Run Code Online (Sandbox Code Playgroud)

}

有趣的是,如果我将调用代码本身包装在 a 中try catch,错误就会被适当地捕获。

为什么我无法从我的捕获中捕获被拒绝的承诺?

快速编辑 - Myconsole.log也没有在 catch 内被调用,但错误似乎在以下行中抛出

在此输入图像描述

Pra*_*l M 1

try catch 不像 then catch 那样工作。

try {
  var res = await Vue.axios({
    url: baseUrl + request.Url,
    params: request.Params,
    method: 'GET',
    headers
  })
}
catch(error) {
    console.error('Failed to GET: ' + error)
    if (typeof error.response !== 'undefined' && typeof error.response.data !== 'undefined' && error.response.data !== null) {
      throw new Error(error.response.data)
    } else {
      throw error
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是js中try catch块的使用方式。等待解决承诺

如果在解析 Promise 时捕获到错误,则错误将被抛出到 catch 块