pim*_*vdb 17 javascript try-catch shorthand
正如您可以转换以下内容:
var t;
if(foo == "bar") {
t = "a";
} else {
t = "b";
}
Run Code Online (Sandbox Code Playgroud)
成:
t = foo == "bar" ? "a" : "b";
Run Code Online (Sandbox Code Playgroud)
,我想知道是否有一种速记/在线方式来转换这个:
var t;
try {
t = someFunc();
} catch(e) {
t = somethingElse;
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以用速记的方式做到这一点,最好是一个oneliner?当然,我可以删除换行符,但我的意思是喜欢的? :东西if.
谢谢.
cod*_*ser 10
有一个衬垫可用作 npm 包try-catch。您可以这样使用它:
const tryCatch = require('try-catch');
const {parse} = JSON;
const [error, result] = tryCatch(parse, 'hello');
Run Code Online (Sandbox Code Playgroud)
async-await try-to-catch有类似的方法:
const tryCatch = require('try-catch');
const {parse} = JSON;
const [error, result] = tryCatch(parse, 'hello');
Run Code Online (Sandbox Code Playgroud)
所有这些包装器所做的就是用块包装一个函数try-catch并使用解构来获取结果。
还有一个想法是使用类似于Go 风格的错误处理:
const {readFile} = require('fs').promises;
read('./package.json').then(console.log);
async function read(path) {
const [error, data] = await tryToCatch(readFile, path, 'utf8');
return data || error.message;
}
Run Code Online (Sandbox Code Playgroud)
没有,没有"一班轮"版try- catch除了简单地删除所有换行符.
你为什么想要?垂直空间不需要任何费用.
即使你决定删除所有新行,我认为这更难以理解:
try{t = someFunc();}catch(e){t = somethingElse;}
Run Code Online (Sandbox Code Playgroud)
比这个:
try {
t = someFunc();
} catch(e) {
t = somethingElse;
}
Run Code Online (Sandbox Code Playgroud)
你有什么是完美的.可读代码应该是优先事项.即使这意味着更多打字.
您可以将其缩减为两行。
try { doSomething(); }
catch (e) { handleError(); }
Run Code Online (Sandbox Code Playgroud)
或者,在您的具体示例中,3 行。
var t;
try { t = doSomething(); }
catch (e) { t = doSomethingElse(); }
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,如果您的代码允许,那么两行代码比典型的 try/catch 块更简洁,IMO。
您可以使用以下函数,然后使用它来连接您的try/catch.它的使用是有限的,使代码更难维护,所以我永远不会使用它.
var v = tc(MyTryFunc, MyCatchFunc);
tc(function() { alert('try'); }, function(e) { alert('catch'); });
/// try/catch
function tc(tryFunc, catchFunc) {
var val;
try {
val = tryFunc();
}
catch (e) {
val = catchFunc(e);
}
return val;
}
Run Code Online (Sandbox Code Playgroud)