Node.js error
对于错误的处理主要分为代码的错误和系统本身的问题其中包含内存不足或者打开文件过多、系统配置以及网络和远程服务问题,错误的处理需要加入到没有任何错误处理的程序中。
需要考虑到任何会导致失败所可能产生的结果,错误是一种 Error
的实例,从而抛出一个异常,或者通过 callback
进行无抛异常进而通过异常。
Error function
Id | Name | Info |
---|---|---|
1 | throw | 以同步的方式传递异常,如果调用者通过 try/catch 异常就会被捕获,如果异常未被捕获则会被 domains 或者进程级的 uncaughtExceptin 捕获 |
2 | callback | 是基础的异步传递方式,用户传进来一个函数(callback) 之后当某个异步操作完成后调用 callback ,在正常情况下 callback(err,result) 的形式被调用,这两个参数自然有一个是非空的,这取决与成功还是失败 |
3 | EventEmitter | 最为主要的是 EventEmitter 是没有 callback 而是返回 EventEmitter 对象。 |
error 当做一个可能会产生多个错误或多个结果的复杂操作时所返回的错误 |
||
row callback 所返回的 EventEmitter 的结果将会触发一个 row 事件 |
||
end 当 row 事件被触发的时候将会触发或返回一个 end 事件 |
通常 callback
和 EventEmitter
将会归到同一个异步的错误传递,使用 rhrow
和callback
以及 EventEmitter
取决与 该一场是操作失败还是系统所造成的 BUG 以及 该函数是同步和异步的。
其中即可以同步传递错误并抛出,又可以传递错误(通过传给一个回调函数或者触发 EventEmitter
的 error
事件)。或者选择回调函数 try.catch
两种具体取决与异常的传递。
同步的异常捕获 (try/catch)
1 | /* |
process uncaughtException
假设 try/catch
未被捕获,则可以通过 process 所提供的 uncaughtException
事件来监听未捕获的异常:
1 | try { |
events
1 | const events = require('events') |
通过 events
库所提供的监听器来监听 error
的事件以及使用 emitter.emit
来发送错误并回调错误信息。
callback
1 | const fs = require('fs') |
Promise
promise 的操作返回 promise 其主要是在异步中操作完成后或失败所最终完成的结果值,他提供了两个值 resolve
以及 reject
,reject
方法返回一个带有拒绝原因的 Promise 对象,而 resolve
则是返回一个指定值解析后的 promise 对象。
1 | /* |
Async/Await
Async/Await 是基于 Promise 的更简洁的风格所编写,其中 async
韩式使用 async 关键字声明函数,从而避免了显式配置承诺链的作用。
1 | const func = function () { |
domain
domain 模块可以处理多个不同 IO 的操作作为一个组,并注册到事件和回调到 domain,当发生一个错误事件或错误时,domain
对象将会被通知,从而不会丢失上下文环境,也不会导致程序立即退出。
1 | const doman = require('domain') |