Promiseが失敗するとき
CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 20/33。
Promiseは、たとえばファイルが存在しない場合などに失敗することもあります。これを拒否といいます。.catchは失敗時に実行するコードを指定します。.finallyは成功時も失敗時もその後に実行されるため、締めくくりのメッセージに便利です。
readFile('weather.txt', 'utf8')
.then((text) => console.log(text))
.catch(() => console.log('No file'))
.finally(() => console.log('Finished'));読み込みに失敗すると、成功時のコールバックはスキップされます。この例では「No file」と表示され、その後に「Finished」と表示されます。失敗メッセージはcatchに記述するため、読み込みが成功した場合には表示されません。
チャレンジ
簡単まずpractice.jsを実行します。不足しているファイルが原因で、未処理のENOENTエラーが発生します。
読み込みに成功した場合のコールバックはそのまま残します。失敗時にNo notes yetを出力する.catchを追加し、その後、どちらの結果でもDoneを出力する.finallyを追加します。引数を指定しない場合、出力される行はNo notes yetとDoneです。note.txtを試すと、出力される行はBuy milkとDoneです。
自分で試してみよう
import { readFile } from 'node:fs/promises';
readFile(process.argv[2] ?? 'missing.txt', 'utf8').then((text) => console.log(text));
Node.jsの基礎のすべてのレッスン
4非同期Node
コールバックの結果を使うコールバックPromiseの結果Promiseが失敗するときPromise値を待つasyncとawait2つの独立した読み取りPromise.allイベントループタイマー自分で練習してみよう: Expressプレイグラウンド