try..catch 没有捕捉到异步/等待错误

Posted

技术标签:

【中文标题】try..catch 没有捕捉到异步/等待错误【英文标题】:try..catch not catching async/await errors 【发布时间】:2016-01-26 02:24:36 【问题描述】:

也许我误解了使用async/await 捕获错误应该如何从诸如https://jakearchibald.com/2014/es7-async-functions/ 和此http://pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.html 之类的文章中起作用,但我的catch 块没有捕获400/500。

async () => 
  let response
  try 
   let response = await fetch('not-a-real-url')
  
  catch (err) 
    // not jumping in here.
    console.log(err)
  
()

example on codepen if it helps

【问题讨论】:

AFAK fetch api 不考虑 400/500 错误 【参考方案1】:

400/500 不是错误,而是响应。只有出现网络问题时,您才会收到异常(拒绝)。

当服务器应答时,你必须检查它是否是good:

try 
    let response = await fetch('not-a-real-url')
    if (!response.ok) // or check for response.status
        throw new Error(response.statusText);
    let body = await response.text(); // or .json() or whatever
    // process body
 catch (err) 
    console.log(err)

【讨论】:

以上是关于try..catch 没有捕捉到异步/等待错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ExpressJS 响应中返回异步等待 try/catch 抛出错误 [重复]

Try/Catch 没有捕捉到 WebException

异常处理——Java的try catch用法

Node.JS - 无法使用try / catch块获得异步抛出

基于任务的异步编程模式(TAP)的错误处理

JavaScript里的try..catch和if...else有何区别啊