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

时间:2018-06-22 13:13:56

标签: javascript ecmascript-6 async-await

我遇到了一个奇怪的错误,我已经苦苦挣扎了整整一天。似乎我被拒绝的诺言没有被我的catch阻止抓住。我对es6 asyncawait有点陌生;但是,这似乎与我在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)
}
},  

在行if (typeof error.response !== 'undefined' && typeof error.response.data !== 'undefined' && error.response.data !== null) {上抛出错误

根据https://javascript.info/async-await#error-handling
因为我将整个异步调用都包装在await中,所以我不应该收到此“ Ucaught(in promise)”​​错误。

调用代码也正在等待此代码。这是供参考的电话。

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

}

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

为什么我不能从捕获的内容中捕获被拒绝的承诺?

快速编辑 -我的console.log也没有在catch中被调用,但是错误似乎在下面的行

上引发

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试捕获不像捕获那样工作。

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
    }
}

这是在js中使用try catch块的方式。 等待兑现诺言

如果在解决承诺时发现了错误,则抛出该错误以捕获块