javascript - 编程标准和重构 try/catch 语句

标签 javascript node.js refactoring

使用:

Node .js

问题:

今天重构我的代码时,我看到了这些行。它们的有趣之处在于,try catch 中的每个替代行都可能导致异常,因此代码可能会崩溃。对于我遵循的实践,每个异常都应该专门处理,并且最少(有用)的代码行应该位于 try catch 中。作为一名程序员,我应该遵循哪种方法(A、B、或者其他)?为什么?我个人会选择 A,因为它减少了代码行数。

代码A:

function(err, someData, res){
    if(err){
        console.error(err);
    } else{

        try{
            data = JSON.parse(someData); //exception expected

            if(someVariable == "abc"){
                var items = data['a']; //exception expected
            } else if(site == "xyz"){
                var items = data['b']; //exception expected
            }

        } catch(err){
            console.error(err);
        }
}

代码B:

function(err, someData, res){
    if(err){
        console.error(err);
    } else{

        try{
            data = JSON.parse(someData); //exception expected
        } catch(err){
            console.error(err);
        }

        if(someVariable == "abc"){
            try{
                var items = data['a']; //exception expected
            } catch(err){
                console.error(err);
            }
        } else if(site == "xyz"){
            try{
                var items = data['b']; //exception expected
            } catch(err){
                console.error(err);
        }
            }
}

最佳答案

扭曲的A

"Clean Code" ,“鲍勃叔叔”马丁认为,尝试/捕获异常是一项值得其自身功能的特定任务。将真正的工作提取到一个单独的方法中。这个愚蠢的建议一开始让我咆哮,但我已经开始真正喜欢这个想法。

parseData = function(someData, res) {
    data = JSON.parse(someData); //exception expected

    if(someVariable == "abc"){
        var items = data['a']; //exception expected
    } else if(site == "xyz"){
        var items = data['b']; //exception expected
    }
}

tryParseData = function(err, someData, res){
    if(err) {
        console.error(err);
    } else {
        try {
            parseData(someData, res);
        } catch(err) {
            console.error(err);
        }
    }
}

关于javascript - 编程标准和重构 try/catch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277397/

相关文章:

android - Node JS FCM token 未向用户发送通知

node.js - NodeJs 产生 ENOENT 错误(Raspbian)

java - 在Intellij中,当我提取一个ArrayList变量时,如何在左侧获得一个List?

javascript - 样式化 jQuery 移动复选框

javascript - 为什么我找不到这个用 jQuery 附加到正文的 DIV

node.js - Docker Nodejs Redis 连接到 127.0.0.1 :6379 failed

javascript - 如何在 apostropecms 中重构客户端 js

Javascript 继承最佳策略

javascript - JSON.parse 允许 null 作为值

Javascript 事件冒泡