01 / 05
時間のかかる処理を待つ
INPUT · スライド
非同期のエラーに備える
02 / 05
いつもの try / catch が使える!
Promise のときは .catch() をチェーンしていたけれど、async / await の世界では、章10で学んだ try / catch がそのまま使える!
await で待っている処理が失敗すると、その場で catch ブロックへジャンプするよ。
const run = async () => { try { const p = Promise.reject("通信エラー"); const data = await p; console.log(data); } catch (error) { console.log("失敗を受け止めた:", error); }};run();実行結果
失敗を受け止めた: 通信エラー
03 / 05
落ちずに安全に続けられる
catch で受け止めたあとは、何事もなかったかのように続きのコードが動く。
「エラーメッセージを出す」「初期値を代わりに使う」といった安全な対策(フォールバック)が取れるよ。
const run = async () => { let items = []; try { items = await Promise.reject("サーバー障害"); } catch (error) { console.log("予備データを使います"); items = ["オフラインデータ"]; } console.log(items[0]);};run();実行結果
予備データを使います オフラインデータ
04 / 05
finally で片づけをする
成功しても失敗しても必ず行いたい処理(ローディング表示を消すなど)は、finally に書く。
画面のスピナー(ぐるぐる)を止める処理は、まさにこの finally の定位置だよ。
const run = async () => { try { await Promise.resolve("成功"); } finally { console.log("読み込み完了"); }};run();実行結果
読み込み完了
05 / 05
まとめて確かめよう
ここまでを整理しておこう。
awaitをtry { }で囲む- 失敗したら
catch (error) { }へ飛ぶ finally { }で成功・失敗を問わず後片づけ- 現場のフロントエンドでは必須の作法
それじゃあ、非同期エラーを受け止めてみよう。