2013-11-03 55 views
0

我是新来的JavaScript,我想知道我应该如何处理错误。更确切地说,我应该何时使用异常,返回值,回调或承诺? 我目前正在使用同步函数的返回值和异步函数的回调/承诺,但我不确定这是一个不错的选择,因为我从不使用异常,而且我知道有些人认为它们非常有用,特别是当一个同步函数可以返回通常的错误值(-1和null)作为正确值时,但实际上,-1和null都是函数的正确结果是非常罕见的。 有人可以告诉我如何选择正确的解决方案?Javascript:错误处理

回答

1

返回值的问题不在于没有值可供选择,而是需要手动检查它们并将它们传播到堆栈中。

如果通过异常发生错误,并且您没有try-catch任何地方,您将崩溃进程并看到一个不错的堆栈跟踪。该错误可以是代码中的错误(通常是TypeError和ReferenceError),也可能是文件不存在的预期发生。在后一种情况下,您应该添加try-catch并处理不存在的文件,在前一种情况下,您不应该添加try-catch,而是修复该错误。另一方面,如果您忘记检查错误的返回值,那么程序可能会默默地继续未定义的状态或其他比崩溃更糟糕的结果。还有一个事实是,错误通常是由于忘记某些东西而引起的,因此需要明确检查任何地方的返回值都是不好的。

另一个问题是即使您检查返回值,您可能也不知道该如何处理它,因此您需要手动传播它,这又需要手动代码。使用try-catch,try catch现在不需要在那里,它可以进一步向下处理错误(比如在UI中显示消息“出错了”)。

如果你想用异步代码处理错误,那么你应该使用promise。虽然最小的承诺实现仍然无法实现,但它仍然要比处理异常代码的错误处理要早得多,而且回调是荒谬的,不仅需要手动检查和传播,还需要2个不同的错误处理通道:同步和异步处理。见What are promises and why should I use them?(免责声明:我是作者)