2

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

数据片段由用户提供或来自外部来源,因此

  • 它们可能以各种方式畸形;
  • 它们可能是模棱两可的;
  • 它们可能相互矛盾。

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

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

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

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

  • 格式错误或矛盾的数据应该是例外
  • 这样,异常行为的代码将明显地与通常的流程分开;
  • 我将能够将异常提升到更高的级别,在此我可以决定如何处理它。

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

  1. @Raynos Node.js 最佳实践异常处理的评论;
  2. http://codebetter.com/karlseguin/2010/01/25/don-t-use-try-catch/

前者不作进一步解释。后来我明白了,但我认为这不是我的情况。

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

4

2 回答 2

2

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

然而,在我最近参与的一个项目中,我使用了这些节点模块:Fibers、Fibers-Promise 以一种有效的方式,我可以在异步回调上做类似于 Thread.join 的事情,并使得在程序中使用节点成为可能,而不是功能风格。

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

于 2012-05-07T16:02:42.347 回答
0

如果您正在处理的是 DATA,您可能会尝试将应用程序视为消息传输。

在这种模式中,无法捕获任何内容,任何无法理解的数据都会向用户返回一条有效消息——一条表示数据无效的消息。

这样您就不会尝试使用您的代码来捕获数据错误 - 这不是一件好事。

你真的不需要一个特殊的库来处理这个,它和任何东西一样都是一个思考练习。实际上,“模型”处理程序(想想 MVC)会很好地完成这项工作。或者,您只需在将其传递给解析器函数之前过滤掉任何非常糟糕的数据(例如零或过长) - 如果解析器无法完全理解数据,则默认向用户返回错误消息。

于 2012-05-15T14:40:46.493 回答