Node.js のファイルを扱う fs モジュールで await async で非同期処理をするメモ

Node.js のファイルを扱う fs モジュールで await async で非同期処理をするメモです。

状況

const fs = require('fs');

fs.readFile('test.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

たまに Node.js でファイルを読み書きするコードを書くことがあるのですが、ついつい fs モジュールの通常のサンプルを参考にしてしまってコールバックで書いてしまいます。そして、色々なファイルを読み込んで複雑に書こうと思うときに、await async で非同期にかけなくて困ることがあります。

いつも、アレコレ調べて、あ、fs に Promise で非同期処理書けたんだよなーって毎度気づいて、時間を消費している気がするので、自分のためにまとめておきます。

fs モジュールで await async で非同期処理で書くとき

こんな感じで書きます。

const fs = require('fs').promises;

main = async () => {
  try {
    const data = await fs.readFile('test.txt', 'utf8');
    console.log(data);
  } catch (error) {
    console.error(error)
  }  
}

main();

いつも忘れるのが、モジュール呼び出しで require('fs').promises で非同期まわりのモジュールが呼べるところですね。ここを忘れて、別のモジュール探そうとしちゃったりするんですよね。

ここさえ呼び出せれば、後は await async で書いていけば素直に組めます。