JavaScript异步编程1.4.3 抛出还是不抛出_JavaScript异步编程1.4.3 抛出还是不抛出试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript异步编程 > 1.4.3 抛出还是不抛出

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异步编程》其他试读目录

• 第1章:深入理解JavaScript事件
• 1.1.1 现在还是将来运行
• 1.1.2 线程的阻塞
• 1.1.3 队列
• 1.2 异步函数的类型
• 1.2.1 异步的I/O函数
• 1.2.2 异步的计时函数
• 1.3 异步函数的编写
• 1.3.1 何时称函数为异步的
• 1.3.2 间或异步的函数
• 1.3.3 缓存型异步函数
• 1.3.4 异步递归与回调存储
• 1.3.5 返值与回调的混搭
• 1.4 异步错误的处理
• 1.4.1 回调内抛出的错误
• 1.4.2 未捕获异常的处理
• 1.4.3 抛出还是不抛出 [当前]
• 1.5 嵌套式回调的解嵌套
• 1.6 小结