🎉

fsはpromiseを使って非同期処理を行う

2024/11/14に公開

事象

scriptを流して全ファイルに対して記述を修正するタスクを進めていました。
下記のように非同期関数をasync, awaitを使用せずに処理をすると
一部ファイルで書き込みがされない事象が発生しました。

const fs = require('fs')
files.forEach((file) => {
         fs.writeFile(filePath, updatedData, 'utf8', (err) => {

原因

fs.writeFileの処理が終える前に次のファイルのループ処理が走り、
出力されなかったのでは?と考察をしています。

解決

fsにはpromise APIが用意されており
こちらを使うことで非同期処理を適切に扱うことができて無事ファイルに出力も確認できました。

const fs = require('fs/promises')
files.forEach(async (file) => {
         await fs.writeFile(filePath, updatedData, 'utf8', (err) => {

参考

ドキュメント

Discussion