我在代码中的多个位置有以下switch语句:
try {
...
} catch(e) {
switch(x){
case A:
throw e;
default:
return e;
}
}
我希望能够将其包装在这样的函数中:
function handle(e) {
switch(x) {
case A:
throw e;
default:
return e;
}
}
try {
...
} catch(e) {
handle(e);
}
我知道上述情况是行不通的(执行“ handle”的代码仍然不会抛出或返回任何东西),但是使代码多一点干燥是非常好的。
答案 0 :(得分:0)
通常来说,这应该不是问题。您的示例有点通用(例如:A
和x
是什么?需要传递它们还是可以从错误中导出它们?),因此本示例提供了一个通用的“解决方案”,例如好(希望)能满足您的需求。
您可以考虑为各种类型的错误创建“错误情况”处理程序。如果处理程序无法找到定义的错误情况,则仅每throw
s次错误。
// Higher-order function to create "error handlers":
function handleBy (cases) {
return function (err) {
if (cases[err.constructor.name]) {
return cases[err.constructor.name](err);
}
throw err;
}
}
// create an error handler which returns different "defaults" or "fallbacks"
// for certain types of errors. alternatively, it returns the error itself
var handleRead = handleBy({
TypeError: function (err) {
return 'default value';
},
SyntaxError: function (err) {
return err;
}
});
// this is the action to be guarded
var unsafeAction = function () {
try {
return window.foo.bar;
} catch (e) {
return handleRead(e);
}
}
console.log(unsafeAction())