异步语言中的错误处理,需要使用一些独特的,非常规的方式。 下边是Node.js中几种主要的错误处理模式。让我们来看一下。
先来熟悉一下Error对象。
Error对象可以是Error类的一个实例,或者扩展继承Error类的自定义Error类:
捕获未捕获的异常
如果在程序执行期间抛出未捕获的异常,程序将崩溃。
要解决此问题,需要在 process 对象上侦听 uncaughtException 事件:
错误返回值
最简单的模式,不能处理异步情况。如下:
抛出错误
这是一个常用的模式,函数执行时,如果出现错误情况,它会直接抛出一个错误。错误异常需要在catch中捕捉并处理。在try / catch中无法处理异步方法调用抛出的错误。要解决这个问题,我们需要使用domains。在node v0.8+版本的时候,发布了一个模块domain。这个模块做的就是try...catch所无法做到的:捕捉异步回调中出现的异常。
Domain示例:
其中 run() 相当于 try, on('error') 相当于 catch
错误回调
通过回调返回错误是Node.js中最常见的错误处理模式。处理错误回调可能变得一团糟(回调地狱金字塔)。
订阅,监听错误
当发出错误时,错误被广播给所有相关的订阅者,按照订阅顺序,间隔执行。
Promise
Promise用于异步错误处理。如下:
Try...catch 和 async/await
ES7 Async / await能够让我们编写看起来是同步的,异步JS代码。
使用Await-to-js 第三方类库
不使用try-catch块的async / await。如下:
总结
以上几种方式,基本包含了从早期到现在的所有错误处理方案。Aysnc/await语法更加直观,简洁,以及编写同步代码的体验。不同环境下,使用最合适的方案,就是最好的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。