1 秒後に Promise を reject
async function causeAsyncError() {
return new Promise((ok, ng) => setTimeout(ng, 1000))
}
try の中で呼び出しても非同期なものは catch されない
async function f1() {
try {
causeAsyncError()
} catch (err) {
console.log("catch")
}
}
f1()
// uncaught error
返り値を await すると catch される
async function f2() {
try {
await causeAsyncError()
} catch (err) {
console.log("catch")
}
}
f2()
// catch
f1 を呼び出す側で await しても効果なし
try {
await f1()
} catch (err) {
cosnole.log("catch")
}
// uncaught error
f1 の Promise は causeAsyncError の結果を待たずに解決される
ループの中などで await させたくない場合は個々に catch メソッド使うことになる
async function f1_() {
try {
causeAsyncError().catch(e => console.log("catch"))
} catch (err) {
console.log("catch")
}
}
f1_()
// catcch