《JavaScript异步编程》试读:1.4.3 抛出还是不抛出

遇到错误时,最简单的解决方法就是抛出这个错误。在Node代码中,大家会经常看到类似这样的回调: function(err) { if (err) throw err; // ... } 在第4章中,我们会经常沿用这一做法。但是,在成品应用中,允许例行的异常及致命的错误像踢皮球一样踢给全局处理器,这是不可接受的。回调中的throw相当于JavaScript写手在说“现在我还不想考虑这个”。 如果抛出那些自己知道肯定会被捕获的异常呢?这种做法同样凶险万分。2011年,Isaac Schlueter(npm的开发者,在任的Node开发负责人)就主张try/catch是一种“反模式”的方式。 try/catch只是包装着漂亮花括弧的goto语句。一旦跑去处理错误,就无法回到中断之处继续向下执行。更糟糕的是,通过throw语句的代码,完全不知道自己会跳到什么地方。返回错误码的时候,就相当于正在履行合约。抛出错误的时候,就好像在说,“我知道我正在和你说话,但我现在不想搭理你,我要先找你老板谈谈”,这太粗俗无礼了。如果不是什么紧急情况,请别这么做;如果确实是紧急情况,则应该直接崩溃掉。 Schlueter提倡完全将throw用作断言似的构造结构,作为一种挂起应用的方式——当应用在做完全没预料到的事时,即挂起应用。Node社区主要遵循这一建议,尽管这种情况可能会随着Domain对象的出现而改变。 那么,关于异步错误的处理,目前的最佳实践是什么呢?我认为应该听从Schlueter的建议:如果想让整个应用停止工作,请勇往直前地大胆使用throw。否则,请认真考虑一下应该如何处理错误。是想给用户显示一条出错消息吗?是想重试请求吗?还是想唱一曲“雏菊铃之歌” ?那就这么处理吧,只是请尽可能地靠近错误源头。

>JavaScript异步编程

JavaScript异步编程
作者: Trevor Burnham
副标题: 设计快速响应的网络应用
原作名: Async JavaScript: Build More Responsive Apps with Less Code
isbn: 7115316570
书名: JavaScript异步编程
页数: 118
译者: 许青松
定价: 32.00元
出版社: 人民邮电出版社
装帧: 平装
出版年: 2013-6