有没有“catch”的反义词?

4

如果抛出错误,您可以通过运行以下代码来运行代码。

try {
    // test
} catch (e) {
    // error output
}

如果没有错误抛出,是否有类似的方法只运行代码?


你可以在 catch 中设置一个标志,然后在之后进行检查。 - alex
我建议查看 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch 上的文档,以了解 try/catch/finally 子句的工作原理。 - Jite
2个回答

13

当然有,看一下内联评论即可。

try {
// test
// No error is thrown if program control reaches here
} catch {
// error output
}

如果您不希望外层的catch处理任何其他错误,请考虑在"没有错误被抛出"部分使用额外的try块。


0
接受的答案假定在try块中没有返回语句,这并不适用于我的情况。在我的情况下,有多个提前返回语句,并且我希望只要没有错误就继续运行代码。在这种情况下,你有几个选择:
使用finally和一个布尔值来检查是否出现错误:
function check () {
    let allGood = true;
    try {
        if (condition1()) {
            return 'foo';
        }

        if (condition2()) {
            return 'bar';
        }

        return doit();
    } catch (e) {
        allGood = false;
        console.error('Oh no!', e);
        return 'bad';
    } finally {
        if (allGood) {
            console.log('All good');
        }
    }
}

这非常简单,保留了您的返回值,并允许您在catch中进行更复杂的错误处理,因此无论您能否从错误中恢复,都可以有条件地设置allGood。

如果您的catch重新抛出错误,您可以使用一个立即调用的函数

function check () {
    const result = (() => {
        try {
            if (condition1()) {
                return 'foo';
            }

            if (condition2()) {
                return 'bar';
            }

            return doit();
        } catch (e) {
            console.error('Oh no!', e);
            throw e;
        }
    })();

    console.log('All good. Also I have access to', result);
    return result;
}

错误将被传递并且不会运行底部的console.log。如果您不需要返回值或捕获,它将变得更加简洁:

function check () {
    (() => {
        if (condition1()) {
            return;
        }

        if (condition2()) {
            return;
        }

        doit();
    })();

    console.log('All good. No errors.');
}

根据你的函数抛出或返回的内容,单一或提前返回以及你想如何处理好/坏状态,有很多方法可以处理它。你只需要选择最适合你代码的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接