Javascript 获取“;未捕获(承诺中)错误”;从挡块内

Javascript 获取“;未捕获(承诺中)错误”;从挡块内,javascript,ecmascript-6,async-await,Javascript,Ecmascript 6,Async Await,我犯了一个奇怪的错误,我已经纠结了将近一天了。我被拒绝的承诺似乎没有被我的catch块捕获。我对es6async和wait有点陌生;然而,它似乎与我在C#中所习惯的非常相似 如果(typeof error.response!='undefined'&&typeof error.response.data!='undefined'&&error.response.data!==null){ 根据 我不应该收到这个“Ucaught(in promise)”错误,因为我将整个异步调用包装在一个wait

我犯了一个奇怪的错误,我已经纠结了将近一天了。我被拒绝的承诺似乎没有被我的
catch
块捕获。我对
es6
async
wait
有点陌生;然而,它似乎与我在C#中所习惯的非常相似

如果(typeof error.response!='undefined'&&typeof error.response.data!='undefined'&&error.response.data!==null){

根据
我不应该收到这个“Ucaught(in promise)”错误,因为我将整个异步调用包装在一个
wait

呼叫代码也在等待此代码。这是供参考的呼叫

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
中,那么错误就会被正确捕获

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

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


尝试捕捉,不要像然后捕捉那样工作

试试看{
var res=等待Vue.axios({
url:baseUrl+request.url,
params:request.params,
方法:“GET”,
标题
})
}
捕获(错误){
console.error('获取失败:'+错误)
if(typeof error.response!='undefined'&&typeof error.response.data!='undefined'&&error.response.data!==null){
抛出新错误(Error.response.data)
}否则{
抛出错误
}

}
因为您的捕获抛出错误?但为什么承诺是错误的呢?那么不应该有一个简单的旧错误控制台消息吗?不,因为您已将函数标记为
async
,这是一个承诺,并且永远都是一个承诺,如果您没有捕获到承诺中的错误,这是一个被拒绝的承诺,如果未处理,这是一个未处理的承诺错误<代码>不应该有一个简单的旧错误控制台消息否,…查看您的代码,您的
Get
处理程序基本上位于承诺链的末尾,。当您到达这里时,您必须处理错误,例如在Node.js中,如果您没有处理错误,Node的未来版本甚至会终止该过程。我要做的是,不要在这里重新抛出,而是替换为
console.error
。/或者,如果您有一些好的日志util,请将其记录下来。。也要记录它。
}.catch(函数(错误){
删除它,并使用适当的
catch(e){}
尝试不要将承诺回调与
异步/await
混合使用,这是一种反模式。你好,Prajav,我也尝试过这种方法,但结果相同。在代码中使用一次又一次的捕获没有任何意义。捕获时没有承诺。顺便说一句,如果您在浏览器上运行此代码,它的兼容性仍然很低。很抱歉,我在在执行时。async/await不像then-catch,它没有任何错误处理,因此在解决承诺时,try-catch用于检查任何错误。如果存在任何错误,则错误是Thrown。这更好,因为OP重新抛出错误会有问题,因为他将此附加到看起来像get处理程序的对象上,请注意:承诺将变为未处理,…如果您将重新抛出替换为
控制台.error
,我认为这应该是OP需要的。.您的解决方案是正确的;但是,对于其他人来说,根本问题在于我没有发布的代码。通常,此调用堆栈在多个级别上捕获错误并始终重新抛出。因此,无论我做了什么在调用堆栈的开始,总是有一个错误被显式抛出链的某个地方。
static async GetPackagingDimensions (input, Id) {
const request = {
  Url: 'api/packing/getPackagingBoxDimensionsByBarCode',
  Params: {
    boxBarcode: input,
    orderId: Id
  }
}
const res = await HttpUtil.Get(request)
return res