Javascript 节目标准及;重构try/catch语句
使用:Javascript 节目标准及;重构try/catch语句,javascript,node.js,refactoring,Javascript,Node.js,Refactoring,使用: function(err, someData, res){ if(err){ console.error(err); } else{ try{ data = JSON.parse(someData); //exception expected if(someVariable == "abc"){ var items = data['a']; //except
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);
}
}
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);
}
}
}
node.js
问题:
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);
}
}
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);
}
}
}
今天在重构代码时,我看到了这些大块的行。有趣的是,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);
}
}
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);
}
}
}
代码B:
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);
}
}
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很好
B是不好的,因为假设您在json解析中出错,它将继续运行其余的代码,即使您知道它不可能成功。更糟糕的是,添加了更多的代码,这些代码可能会产生奇怪的副作用,或者很难找到bug。而且读起来非常混乱
您应该将错误捕获分组到逻辑块中,如果一个部分失败,而运行其余部分没有意义,请将其视为要捕获的一个错误块。A可以
B是不好的,因为假设您在json解析中出错,它将继续运行其余的代码,即使您知道它不可能成功。更糟糕的是,添加了更多的代码,这些代码可能会产生奇怪的副作用,或者很难找到bug。而且读起来非常混乱
您应该将错误捕获分组到逻辑块中,如果一个部分出现故障,而运行其余部分没有意义,请将其视为要捕获的一个错误块。我不认为使用多个try-catch块(B)-每个源代码行一个-有任何优势。对代码的每一个语义特定部分使用一个try-catch块(a),通常是一个方法或代码块,它们必须以原子方式执行-作为一个整体,它要么成功,要么失败 如果需要以不同的方式处理不同的异常,请在catch块中检查它们:
try
{
// ...
}
catch(e)
{
if(e instanceof SpecificError)
{
//
}
}
另外,您可能会分析
e.message
,我认为使用许多try-catch块(B)并没有任何优势,每个源代码行一个。对代码的每一个语义特定部分使用一个try-catch块(a),通常是一个方法或代码块,它们必须以原子方式执行-作为一个整体,它要么成功,要么失败
如果需要以不同的方式处理不同的异常,请在catch块中检查它们:
try
{
// ...
}
catch(e)
{
if(e instanceof SpecificError)
{
//
}
}
此外,您还可能分析带有扭曲的
e.message
A
在《Bob叔叔》一书中,“Bob叔叔”Martin认为,尝试/捕获异常是一项值得自己发挥作用的特定任务。将实际工作提取到单独的方法中。这个愚蠢的建议一开始让我大发雷霆,但实际上我已经开始喜欢这个想法了
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);
}
}
}
A带扭曲 在《Bob叔叔》一书中,“Bob叔叔”Martin认为,尝试/捕获异常是一项值得自己发挥作用的特定任务。将实际工作提取到单独的方法中。这个愚蠢的建议一开始让我大发雷霆,但实际上我已经开始喜欢这个想法了
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);
}
}
}