Node jsで始めるfilesystem10 非同期ファイル操作
今回ファイル操作を非同期で行ってみます。
Node.jsでの非同期ファイル操作メソッドは同期ファイル操作のメソッドと違って結果をコールバックで受け取ります。それではフォルダーからファイル一覧を取得するfs.readdirメソッドの例から見てみます。
これは何回も見てきたように同期的にファイル一覧を取得するやり方です。これを非同期でやる場合は。
コールバックで結果を受け取ります。エラーが起きた場合はエラーもコールバックで受け取るのが通例です。これをPromiseで結果を受け取ってasync awaitを使えば見た目が同期処理のようなコードを書き込めます。
しかしreaddir他、mkdirやreadFie等一々非同期メソッドをPromiseで囲むのもめんどくさい話です。そこでNode ver10から使用できるようになったfs.promisesを使えばデフォルトで結果をPromiseで返してくれるようになるので非同期処理のコードをかなり簡素化できます。
勿論mkdirやreadFileなどでも使用できます。ちなみにreaddirメソッドに関してはwithFileTypesオプションも兼ねて使用すると再帰的にファイルを取得する非同期処理のコードも大幅に簡素化可能。
同期処理と比べてもほとんどコードの長さが変わりません。
ただしfs,promisesのAdobe CEPでの対応はCEP10から、しかも10以前のバージョンに対応するには結局使えない、という結論になります。別途moduleなんかで対応するかないでしょう。Adobeの一般的なソフトのメジャーアップデートは大体年に一回、しかもCEPのアップデートが毎回ソフトのアップデートに追従するわけでないのでCEPのJavascriptの使用が世の中に比べて一回りか二回り遅れ気味です。ある程度新しい技術を取り入れようとするとこういった問題にも対応しなければならない事は覚悟した方が良いでしょう。