我有许多函数,它们要么返回一些东西,要么抛出一个错误。在main函数中,我调用每个函数,并希望返回每个函数返回的值,或者如果第一个函数抛出错误,则继续执行第二个函数。
因此,我目前所拥有的基本上是:
function testAll() {
try { return func1(); } catch(e) {}
try { return func2(); } catch(e) {} // If func1 throws error, try func2
try { return func3(); } catch(e) {} // If func2 throws error, try func3
}
但实际上,我只希望try
返回它(即,如果它不抛出错误)。我不需要catch
块。但是,像try {}
这样的代码会失败,因为它缺少一个(未使用的) catch {}
块。
那么,有没有办法在去除这些catch
块的同时达到同样的效果呢?
发布于 2011-04-23 20:19:04
不是的。你得留着它们。
这实际上是有意义的,因为错误不应该被完全忽略。
发布于 2018-02-23 04:40:37
我不建议不带catch的try-finally,因为在我自己的测试中,如果try块和finally块都抛出了错误,则finally子句中抛出的错误会被冒泡起来,try块的错误会被忽略:
try {
console.log('about to error, guys!');
throw new Error('eat me!');
} finally {
console.log ('finally, who cares');
throw new Error('finally error');
}
结果:
> about to error, guys!
> finally, who cares
> .../error.js:9
> throw new Error('finally error');
> ^
>
> Error: finally error
发布于 2012-11-06 02:17:22
我决定从不同的角度来看待这个问题。
我已经能够确定一种方法,以便在部分解决另一个评论者列出的未处理错误对象的同时,密切支持所请求的代码模式。
代码可以在@ http://jsfiddle.net/Abyssoft/RC7Nw/4/中看到
try:catch被放在一个for循环中,允许优雅地失败。同时能够遍历所需的所有函数。当需要显式错误处理时,会使用额外的函数数组。在具有错误处理程序的偶数组和函数数组中,元素不是函数,错误被转储到控制台。
根据堆栈溢出的要求,此处是代码内联编辑,以使JSLint兼容(删除前导空格以确认),提高可读性
function func1() {"use strict"; throw "I don't return anything"; }
function func2() {"use strict"; return 123; }
function func3() {"use strict"; throw "I don't return anything"; }
// ctr = Code to Run <array>, values = values <array>,
// eh = error code can be blank.
// ctr and params should match 1 <-> 1
// Data validation not done here simple POC
function testAll(ctr, values, eh) {
"use strict";
var cb; // cb = code block counter
for (cb in ctr) {
if (ctr.hasOwnProperty(cb)) {
try {
return ctr[cb](values[cb]);
} catch (e) {
if (typeof eh[cb] === "function") {
eh[cb](e);
} else {
//error intentionally/accidentially ignored
console.log(e);
}
}
}
}
return false;
}
window.alert(testAll([func1, func2, func3], [], []));
https://stackoverflow.com/questions/5764107
复制相似问题