はじめに
アプリ内でディレクトリを作る、となった場合、存在有無は?階層構造は?存在してた場合は?というようなことを考えなくてはならないわけですが、 Node.jsではFileReadとFileReadSyncみたいに、Syncがついているものとついていないものがあります。 やることは同じなんですがどう違うかというと非同期か同期的に実行されるかで、Sync(同期的)は使わないほうがよいとされています。 FileIOとかは時間がかかるので同期的にやると処理が遅くなってしまうからです。つまりSyncを使うことはNodejserにとって敗北。 なので、ファイルの存在確認の説明書を見ると
fs.exists(path, callback) [deprecate] fs.existsSync(path)
となっています。 つまりSyncは使えるけど非同期の存在確認は非推奨。 これは非同期処理に於いて、その時点のファイル存在確認ってどの時点の存在確認?という意味です。 つまり存在確認なんてするだけ無意味でそんなもん気にしないんだよ、っていうメッセージである。というおはなしでした。
概要
module.exports.makeDir = (path)-> new Promise (f, r)->
path = path[0...-1] if path.match("/$")
fs.mkdir path, (e)->
if e?
if e.code == 'ENOENT'
helper.makeDir path.split("/")[0...-1].join("/")
.then (v)->
helper.makeDir path
.then (v)->
f()
.catch (e)->
r e
.catch (e)->
r e
else
r e
else
f()
として
helper.makeDir "po/bag/asdf/asdf/fe/fe/asdf/efe/sasdf/efda/sdfe/fa/"
.then (v)-> console.log v
.catch (e)-> console.log e
とかやるとできます。
おわりに
「PHPは なければその階層まで勝手に作る」と言われました。。。 http://php.net/manual/ja/function.mkdir.php
鈴木
和服とvapeとСистемаと醗酵とたまごふわふわとカッティングシェイプスとジャージークラブとjuke/fwkに傾倒する人です