首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中可以尝试{}而不捕获{}吗?

在JavaScript中可以尝试{}而不捕获{}吗?
EN

Stack Overflow用户
提问于 2011-04-23 20:15:55
回答 6查看 106.9K关注 0票数 143

我有许多函数,它们要么返回一些东西,要么抛出一个错误。在main函数中,我调用每个函数,并希望返回每个函数返回的值,或者如果第一个函数抛出错误,则继续执行第二个函数。

因此,我目前所拥有的基本上是:

代码语言:javascript
复制
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 {}块。

我把an example on jsFiddle放在。

那么,有没有办法在去除这些catch块的同时达到同样的效果呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-23 20:19:04

不是的。你得留着它们。

这实际上是有意义的,因为错误不应该被完全忽略。

票数 -23
EN

Stack Overflow用户

发布于 2018-02-23 04:40:37

我不建议不带catch的try-finally,因为在我自己的测试中,如果try块和finally块都抛出了错误,则finally子句中抛出的错误会被冒泡起来,try块的错误会被忽略:

代码语言:javascript
复制
try {
  console.log('about to error, guys!');
  throw new Error('eat me!');
} finally {
  console.log ('finally, who cares');
  throw new Error('finally error');
}

结果:

代码语言:javascript
复制
>     about to error, guys!
>     finally, who cares
>     .../error.js:9
>         throw new Error('finally error');
>         ^
>     
>     Error: finally error
票数 9
EN

Stack Overflow用户

发布于 2012-11-06 02:17:22

我决定从不同的角度来看待这个问题。

我已经能够确定一种方法,以便在部分解决另一个评论者列出的未处理错误对象的同时,密切支持所请求的代码模式。

代码可以在@ http://jsfiddle.net/Abyssoft/RC7Nw/4/中看到

try:catch被放在一个for循环中,允许优雅地失败。同时能够遍历所需的所有函数。当需要显式错误处理时,会使用额外的函数数组。在具有错误处理程序的偶数组和函数数组中,元素不是函数,错误被转储到控制台。

根据堆栈溢出的要求,此处是代码内联编辑,以使JSLint兼容(删除前导空格以确认),提高可读性

代码语言:javascript
复制
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], [], []));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5764107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档