遗留错误处理倾向于遵循所有函数根据成功/失败返回代码的方法。您将检查此代码并适当地处理(如果有错误)。
但是,现代编程语言遵循异常模型,在这种情况下,如果发生无法正确处理的exceptional,则会引发异常-一直冒泡直到被处理。
我的问题是为什么我们要转向异常模型?这背后的原因是什么?为什么会更好?
说明/链接将不胜感激。
我已经详细介绍了这一点:Exceptions vs. status returns,但简要地是:
最后一点:如果您忘记执行状态返回操作,则会忽略错误。如果您忘记对异常进行处理,则异常会在可见到软件的外层时冒泡。
这里有两个原因
状态码通常比表示要处理函数的立即调用代码的情况更好。状态代码的问题在于,如果立即调用代码不处理它们,则可能什么也不会发生。如果代码抛出异常,并且不准备立即调用代码来处理该异常,则该异常将传播到至少声称已准备好该代码的代码。
[Throwing an exception明确指出出了问题,这是程序员更难忽略的](因为如果没有catch块,程序将终止。)>
异常将终止其余函数的执行,并将控制权传递给下一个catch块(如果当前调用堆栈中有任何内容,如果没有,则程序将终止)
是,它是可选的,但您应始终使用.catch()
处理程序(对于Promises)。
这意味着,我们可以在单个处理程序中处理许多函数中的许多错误,如下所示;
storeData() .then(changeSomething) .then(storeData) .catch((e) => { // Handle the error. })
这里我们可以看到如何处理三个不同功能的错误。本质上,catch的行为与将所有功能包装在同步try / catch中一样。