ここ数ヶ月nodejsでお仕事をしていて、こんな感じのコードをいくつか作ったんですが、昨日初めてutil.promisifyの存在を知りました orz
function hoge(filename){ return new Promise(function(resolve, reject){ fs.readFile(filename, function(err,data){ if(err){ reject(err); }else{ resolve(data); } }); }); }
このコードが次の1行で済んじゃうという・・・
util.promisify(fs.readFile)
実装はこんな感じです。
github.com
やってることは、
- 引数で渡された関数を実行
- callbackの第1引数がfalsyだったらreject
- そうでなければcallbackの第2引数以降を引数にしてresolve
引数で渡された関数が例外を投げた時にもrejectしたり、callbackの第3引数以降もまとめてresolveの引数に渡してたりと上でやってることよりさらに汎用的な作りになってます。
要はいままで劣化した車輪を再発明してたようで・・・