繁体   English   中英

在承诺链的早期处理错误

[英]Handling Errors early in the Promise Chain

我试图找到一种处理诺言链上错误的一般方法。 在下面的片段中,我想直接在connection.js中处理潜在的连接错误。

connection.js

function getData() {
  return fetch(myEndpoint)
   .catch(err => handleConnectionError(err)) // redirect to error page or similar
}

app.js

// import connection
connection.getData()
  .then(data => handleData(data.foo))

因此,这种情况可以通过两种方式发挥作用:

  • 如果我在不抛出新错误的情况下在connection.js中捕获错误,它将继续promise链,并且handleData()将失败
  • 如果我在处理完错误后再次抛出错误,则Promise链将不再执行,但是控制台中将出现未处理的承诺被拒绝错误。

因此,除了我每次在应用程序中的某处使用getData()函数时,没有比捕获和处理错误更好的方法了吗?

进行此操作的最佳方法是进行最后的处理以解决所有错误。 例如:

function errorHandler(e) {
    if (e instanceof x) {
        //handle here
    }
}

接着:

fetch(endPoint).then(doSomething).then(doAnotherThing).catch(err => errorHandler(err))

如果沿链条的访存或任何其他promise产生错误,那么其余的then()语句将被跳过,并由最终的catch函数捕获。 从那里开始,您将需要确保所有诺言可能引发的所有类型的错误都得到了解决。

但是,您将需要摆脱getData中的问题,因为它将处理该链的其余部分,因为该错误已得到解决。

希望能有所帮助

因此,除了我每次在应用程序中的某处使用getData()函数时,没有比捕获和处理错误更好的方法了吗?

是的,这正是您应该做的:

function getData() {
  return fetch(myEndpoint)
}

// elsewhere:
connection.getData().then(handleData, handleConnectionError);

您通常不知道是否总是要“ 重定向到错误页面或类似页面 ”。 也许在应用程序的某些位置,您可以通过伪造响应数据来处理连接错误,而在其他位置,您可能希望显示错误消息而不是触发重定向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM