是否应该在try块中完全包含async / await代码?

时间:2017-06-10 12:54:06

标签: javascript async-await ecmascript-2017

我一直在阅读新的async / await,并在Node 8中一直在玩它。我遇到过一些人把所有内容放在最初的try块中,而其他人只有await,其余的都在try / catch之下。这个比那个好吗?这是我自己的代码中的两个函数中的函数之一,以显示我的意思:

async function findCurrentInstallations() {
    try {
        const results = await installations.find({});

        if (results.length === 0) { throw new Error('No installations registered'); }
        return results;
    } catch (err) {
        throw err;
    }
}

-

async function findCurrentInstallations() {
    let results;

    try {
        results = await installations.find({});
    } catch (err) {
        throw err;
    }

    if (results.length === 0) { throw new Error('No installations registered'); }
    return results;
}

2 个答案:

答案 0 :(得分:2)

您提供的示例中根本不需要trycatch,这是async函数的默认行为。

您的两个代码片段的不同之处在于,第一种情况下的throw new Error(...将由catch子句处理。但是,由于catch条款用于所有实际目的,无操作,传递,它并不重要。

我会把它写成:

async function findCurrentInstallations() {
    const results = await installations.find({});
    if (results.length === 0) { throw new Error('No installations registered'); }
    return results;
}

答案 1 :(得分:1)

只包装await,只会捕获await失败引发的错误,如果代码中的任何行失败,整个过程将会失败,这取决于你想要捕获的内容。

请注意,您只是抛出示例,这是无用的,因为应用程序在失败时会抛出。