jus*_*ing 9 javascript exception-handling exception try-catch node.js
我正在开发一个包含解析器的小型Node.js包.一旦检测到不可恢复的问题,它就会抛出.
我已经使用Java很多年了,我习惯了大量的异常类.
但这是JavaScript.我想这是一个风格问题.我的基本问题是如何传递错误原因来捕获块.我想到了为不同的错误原因创建不同的错误"类",每个类都处理每个问题的细节,或者将一个错误类作为属性保存.
让我举一个处理这两种错误的例子:
catch(e) {
if(e instanceof FirstError) {
...
}
if(e instanceof SecondError) {
...
}
}
catch(err) {
if(err instanceof AnError) {
if(err.detail === 'becauseOfA') {
...
}
if(err.detail === 'becauseOfB') {
...
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?两者都有效,但我不喜欢第一个.在我看来,许多课程都是一个巨大的开销.
编辑:
我同意使用回调(也在这里回答):
// One class per error type
function(err, ast) {
if(err) {
if(err instanceof FirstError) {
...
}
if(err instanceof SecondError) {
...
}
}
...
}
// One class for all errors
function(err, ast) {
if(err) {
if(err instanceof AnError) {
if(err.detail === 'becauseOfA') {
...
}
if(err.detail === 'becauseOfB') {
...
}
}
...
}
}
// No class at all
function(err, ast) {
if(err) {
if(err.detail === 'becauseOfA') {
...
}
if(err.detail === 'becauseOfB') {
...
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
问题仍然存在:我是否应该删除所有类并使用一个没有任何原型继承的简单对象?我需要将有关问题的信息传递给错误处理程序(无论是catch还是callback).
我希望保持这个功能同步,因为它很小而且很快(是的,我知道回调不会使函数异步).AFAIK Node.js本身在同步代码(fs.readFileSync)中抛出错误,同时将错误对象传递给异步函数(fs.readFile)中的回调.
我认为,节点的最佳方法是以回调方式重写模块。尽管您应该向回调传递两个参数:第一个是错误或 null(如果操作成功完成),第二个是操作的结果(如果发生错误,则为 null 或未定义)。
您可以简单地在回调中处理它们。您可以将错误作为字符串传递,然后仅使用 case(error) 来处理不同的情况。
更新:
对于同步方法,您可以使用抛出,但您也可以仅抛出字符串,然后切换它们。如果你想典型化你的错误(例如,如果方法可能抛出非常不同的错误(在Java代码中,它们可能在不同的类中描述)),你可以使用如下所示的对象: { error: 'error_name', type: 'error_type '}。
然后切换(err.type),切换(err.error)。
在 Javascript 中使用类并不是最好的方法,因为它只是创建具有原型属性的对象,指向构造函数对象,然后 instaceof 比较该指针。
归档时间: |
|
查看次数: |
801 次 |
最近记录: |