Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:错误处理_Javascript_Exception_Callback_Return_Promise - Fatal编程技术网

Javascript:错误处理

Javascript:错误处理,javascript,exception,callback,return,promise,Javascript,Exception,Callback,Return,Promise,我是javascript新手,我想知道应该如何处理错误。更准确地说,我应该在什么时候使用异常、返回值、回调或承诺? 我现在使用的是同步函数的返回值和异步函数的回调/承诺,但我不确定这是一个不错的选择,因为我从不使用异常,我知道有些人认为它们非常有用,特别是当同步函数可以返回通常的错误值(-1和null)作为正确值时,但在实践中,-1和null都是函数的正确结果是非常罕见的。 有人可以告诉我如何选择正确的解决方案吗?返回值的问题不是没有可供选择的值,而是您需要手动检查这些值并将它们传播到堆栈中 如

我是javascript新手,我想知道应该如何处理错误。更准确地说,我应该在什么时候使用异常、返回值、回调或承诺? 我现在使用的是同步函数的返回值和异步函数的回调/承诺,但我不确定这是一个不错的选择,因为我从不使用异常,我知道有些人认为它们非常有用,特别是当同步函数可以返回通常的错误值(-1和null)作为正确值时,但在实践中,-1和null都是函数的正确结果是非常罕见的。
有人可以告诉我如何选择正确的解决方案吗?

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

如果由于异常而发生错误,并且您在任何地方都没有try-catch,那么您将使进程崩溃,并看到一个很好的堆栈跟踪。该错误可能是代码中的错误(通常是TypeError和ReferenceError),也可能是预期出现的错误,如文件不存在。在后一种情况下,您应该添加try-catch并处理不存在的文件,在前一种情况下,您不应该添加try-catch,而是应该修复错误

另一方面,如果您忘记检查错误的返回值,那么程序可能会在未定义状态下默默地继续运行,或者出现比崩溃更糟糕的结果。还有一个事实,bug通常是由于忘记了一些东西而导致的,因此需要在任何地方显式检查返回值都是不好的

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

如果您想用异步代码处理错误,那么应该使用承诺。尽管一个最小承诺实现仍然不适用于此,但它仍然比使用回调处理异步代码的错误早了几光年,这很荒谬,不仅需要手动检查和传播,而且需要两种不同的错误处理通道:同步和异步。参见(免责声明:我是作者)