ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
本文假设: * 你已经熟悉了JavaScript、Java、 Python、 C++ 或者类似的语言中异常的概念,而且你知道抛出异常和捕获异常是什么意思。 * 你熟悉怎么用NodeJS编写代码。你使用异步操作的时候会很自在,并能用`callback(err,result)`模式去完成异步操作。你得知道下面的代码不能正确处理异常的原因是什么[脚注1] ~~~ function myApiFunc(callback) { /* * This pattern does NOT work! */ try { doSomeAsynchronousOperation(function (err) { if (err) throw (err); /* continue as normal */ }); } catch (ex) { callback(ex); } } ~~~ 你还要熟悉三种传递错误的方式: - 作为异常抛出。 - 把错误传给一个callback,这个函数正是为了处理异常和处理异步操作返回结果的。 - 在EventEmitter上触发一个Error事件。 接下来我们会详细讨论这几种方式。这篇文章不假设你知道任何关于domains的知识。 最后,你应该知道在JavaScript里,错误和异常是有区别的。错误是Error的一个实例。错误被创建并且直接传递给另一个函数或者被抛出。如果一个错误被抛出了那么它就变成了一个异常[脚注2]。举个例子: ~~~ throw new Error('something bad happened'); ~~~ 但是使用一个错误而不抛出也是可以的 ~~~ callback(new Error('something bad happened')); ~~~ 这种用法更常见,因为在NodeJS里,大部分的错误都是异步的。实际上,`try/catch`唯一常用的是在`JSON.parse`和类似验证用户输入的地方。接下来我们会看到,其实很少要捕获一个异步函数里的异常。这一点和Java,C++,以及其它严重依赖异常的语言很不一样。