我正在尝试找到一种处理诺言链上错误的一般方法。在下面的片段中,我想直接在connection.js中处理潜在的连接错误。
function getData() {
return fetch(myEndpoint)
.catch(err => handleConnectionError(err)) // redirect to error page or similar
}
// import connection
connection.getData()
.then(data => handleData(data.foo))
因此,这种情况有两种播放方式:
那么,除了我每次在应用程序中的某个地方使用getData()函数时,没有比捕获和处理错误更好的方法了吗?
答案 0 :(得分:0)
执行此操作的最佳方法是进行最后的处理以解决所有错误。例如:
function errorHandler(e) {
if (e instanceof x) {
//handle here
}
}
然后:
fetch(endPoint).then(doSomething).then(doAnotherThing).catch(err => errorHandler(err))
如果沿链中的访存或任何其他承诺产生错误,那么其余的then()语句将被跳过,并由最终的catch函数捕获。从那里开始,您需要确保处理所有诺言可能引发的所有类型的错误。
但是,您将需要摆脱getData中的问题,因为由于已解决了错误,它将导致链的其余部分照常运行。
希望有帮助
答案 1 :(得分:0)
因此,除了我每次在应用程序中的某个位置使用
getData()
函数时捕获并处理错误之外,实际上没有更好的方法了吗?
是的,这正是您应该做的:
function getData() {
return fetch(myEndpoint)
}
// elsewhere:
connection.getData().then(handleData, handleConnectionError);
您通常不知道是否总是要“ 重定向到错误页面或类似页面”。也许在您应用程序的某些地方,您可以通过伪造响应数据来处理连接错误,而在其他地方,您可能希望显示错误消息而不是触发重定向。