node.js - Node : never use try-catch?

标签 node.js exception callback try-catch

我正在用 Node.js 编写一个数据处理系统。

数据是用户提供的或来自外部来源,因此

  • 它们可能会以多种方式发生畸形;
  • 它们可能不明确;
  • 它们可能相互矛盾。

在这些情况下,我通常想提醒用户,然后:

  • 如果系统在交互模式下使用(即数据在 REPL 中输入),则处理应停止,建议一些操作并等待用户的决定。
  • 如果它以批处理模式运行(即数据来自文件、网络服务或类似来源),我想继续处理并丢弃这些信息。

当然,提醒用户的方式也取决于模式。

我认为异常是此类问题的正确解决方案,因为:

  • 格式错误或矛盾的数据应该是异常(exception)
  • 这样,异常行为的代码就会明显地与通常的流程分开;
  • 我将能够将异常冒泡到更高级别,在此基础上我可以决定具体如何处理它。

所以我开始寻找指南并发现了两个相关的东西:

  1. @Raynos 的评论 Node.js Best Practice Exception Handling ;
  2. http://codebetter.com/karlseguin/2010/01/25/don-t-use-try-catch/ .

前者无需进一步解释。后来我明白了,但我想这不是我的情况。

你会如何解决这个问题?我正在寻找通用方法,不一定是特定于平台或语言的...或者 JavaScript try-catch 中有什么特别邪恶的东西吗?

最佳答案

确实,try { } catch { } finally { } 在标准 Node 中的用处有限,并且错误处理可能会出现问题。

然而,在我最近参与的一个项目中,我使用了这些 Node 模块:Fibers、Fibers-Promise,在某种程度上,我可以有效地在异步回调上执行类似于 Thread.join 的操作,并且可以在程序中使用 Node ,而不是功能性风格。

有一些权衡。 Fibers/所有协程库修改了node的核心代码,导致无法在前端使用。但根据您的目的,您可能需要对此进行研究。

关于node.js - Node : never use try-catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485130/

相关文章:

node.js - 使用 'ms-rest-nodeauth' 刷新服务主体身份验证的访问 token

javascript - 最快的手指优先应用程序架构 - Redis?

excel - 如何在不破坏对象的情况下停止 VBA 宏

jquery - YouTube iframe api - 为什么 onError 事件被调用两次?

node.js - express-session:为什么在设置 session 信息之前执行重定向?

javascript - 为什么我得到 "createProperty is not a function"?

android - 在android中上传文件到Dropbox,putFile方法抛出异常

java - 异常:ClassNotFoundException & NoClassDefFoundError At Release Run Application

javascript - 如何使用 Promise 或回调来延迟脚本操作

javascript - Javascript 如何匹配回调函数中的参数?