ブロックスコープな上に try が文なせいで色々面倒になる
Node.js の Sync 系関数の場合 Promise を返す版にすれば結構楽になる
Web サーバとかじゃないスクリプトで並行に処理する必要もないときは Sync にしてたけど これを考えると Sync にしないほうが楽
例
// Sync の場合
let stat
try {
stat = fs.statSync(dir)
if (!stat.isDirectory()) {
return
}
} catch (err) {
return
}
// Promise の場合
const stat = await fs.promises.stat(dir).catch(err => null)
if (!stat || !stat.isDirectory()) {
return
}
エラーを見るなら
const stat = await fs.promises.stat(dir).catch(err => err)
if (stat instanceof Error) {
//
}
if (!stat.isDirectory()) {
return
}