如何轻松处理javascript异步函数中的所有错误?

js_*_*js_ 5 javascript error-handling asynchronous try-catch onerror

try/catch无法处理异步函数中的错误。
当然,如果我try/catch在每个异步函数中编写代码,也可以处理,但这是不现实的。

window.onerror可以处理异步函数中的错误。
但是window.onerror捕获窗口中的所有错误。
我只希望仅在窗口中的javascript应用程序(例如游戏)的异步(以及同步)函数中处理所有错误。
而且,如果仅在javascript应用程序中发生错误,我想显示一条错误消息并停止该应用程序。
我不想为应用程序中的错误做任何事情。

mgi*_*uca 2

听起来似乎无法区分脚本错误和其他错误。如果您只想捕获自己的异常类型,那么您可以定义一个自定义异常构造函数并从中派生所有您自己的异常。然后window.onerror检查该对象是否派生自您的自定义构造函数(如果是,则返回 true,以抑制错误,否则返回 false)。

我认为最可靠的方法将每个异步函数包围在 try/catch 中(即使您说您不想这样做)。你可以把它变成一个习语;将每个异步函数包围在 try/catch 中,并让 catch 块调用适当处理错误的函数。或者更好的是,创建一个习惯用法,其中异步函数需要一个额外的“失败”回调,如果发生错误,它会调用该回调。这样,异步函数的调用者就可以指定异步错误处理程序。(一方面,GWT 框架使用了这种方法。)