我一直在阅读新的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;
}
答案 0 :(得分:2)
您提供的示例中根本不需要try
和catch
,这是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失败引发的错误,如果代码中的任何行失败,整个过程将会失败,这取决于你想要捕获的内容。
请注意,您只是抛出示例,这是无用的,因为应用程序在失败时会抛出。