传统错误处理往往遵循所有函数根据成功/失败返回代码的方法。您将检查此代码并正确处理(如果出现错误)。
然而,现代编程语言遵循异常模型,如果发生某些异常但无法正确处理的异常,则抛出异常 - 这会一直冒泡直到处理完毕。
我的问题是为什么我们会转向异常模式?这背后的原因是什么?为什么会更好?
解释/链接将非常感激。
答案 0 :(得分:34)
我已经详细地写了这篇文章:Exceptions vs. status returns,但简单地说:
要扩展最后一点:如果您忘记执行状态返回应执行的操作,则忽略错误。如果您忘记执行应对异常执行的操作,则异常会冒泡到软件的外层,使其可见。
答案 1 :(得分:10)
以下是几个原因
答案 2 :(得分:4)
状态代码通常比异常更好,因为它们表示函数的立即调用代码准备处理的情况。状态代码的问题在于,如果直接调用代码不处理它们,则可能没有任何意义。如果代码抛出异常并且立即调用代码没有准备好处理它,则异常将传播到至少声称已经准备好的代码。
答案 3 :(得分:1)
Throwing an exception明确指出了出错的地方,这是程序员很难忽略的(因为如果没有catch块,程序将终止)。
异常将终止函数其余部分的执行,并将控制权传递给下一个catch块(如果当前调用堆栈中有任何catch块。如果没有,则程序将终止)
是的,它是可选的,但您应始终使用.catch()
处理程序(对于Promises)。
这意味着,我们可以在一个处理程序中处理多个函数中的许多错误,如下所示;
storeData()
.then(changeSomething)
.then(storeData)
.catch((e) => {
// Handle the error.
})
在这里,我们可以看到如何同时处理三个不同功能的错误。本质上,catch的行为就像将所有功能包装在同步try / catch中一样。