コールバック
CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 14/24。
大きなファイルを読み込むには時間がかかり、その間、読み込みを待っているプログラムはほかのことを何もしません。
fs.readFile(path, 'utf8', callback)は読み込みを開始し、すぐに戻ります。ファイルの読み込みが完了すると、Nodeは(err, text)を渡してコールバックを呼び出します。成功時、errはnullで、それ以外の場合はエラーになるため、まず確認してください。テキストを必要とする処理はすべてコールバックの中に書きます。
import fs from 'node:fs';
fs.readFile('poem.txt', 'utf8', (err, text) => {
if (err) {
console.log('No poem today');
return;
}
console.log(text.split('\n').length + ' lines');
});
console.log('Asked for the poem');Asked for the poemが最初に出力されます。readFileの次の行は、ファイルの読み込み中に実行されるためです。
チャレンジ
簡単count.jsはReading...を出力し、その後コールバック内から<n> notesを出力し、さらにコールバック内からDoneを出力します。- ファイルを読み取れない場合、件数の代わりに
Cannot read <file>を出力します。
node count.js を実行し、続けて node count.js nothere.json を実行してください。
自分で試してみよう
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// fs.readFileとコールバックを使ってファイルを読み込む。
// ノートの件数を表示し、次にDoneを表示する。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。