我正在用 Node.js 编写一个数据处理系统。
数据是用户提供的或来自外部来源,因此
- 它们可能会以多种方式发生畸形;
- 它们可能不明确;
- 它们可能相互矛盾。
在这些情况下,我通常想提醒用户,然后:
- 如果系统在交互模式下使用(即数据在 REPL 中输入),则处理应停止,建议一些操作并等待用户的决定。
- 如果它以批处理模式运行(即数据来自文件、网络服务或类似来源),我想继续处理并丢弃这些信息。
当然,提醒用户的方式也取决于模式。
我认为异常是此类问题的正确解决方案,因为:
- 格式错误或矛盾的数据应该是异常(exception);
- 这样,异常行为的代码就会明显地与通常的流程分开;
- 我将能够将异常冒泡到更高级别,在此基础上我可以决定具体如何处理它。
所以我开始寻找指南并发现了两个相关的东西:
- @Raynos 的评论 Node.js Best Practice Exception Handling ;
- 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/