LoginSignup
0
0

More than 5 years have passed since last update.

ES6 Promiseベースのdenodeify()を実装する

Last updated at Posted at 2015-06-28

はじめに

ES6のPromiseを使ってdenodeify()を実装してみた。Q.jsのdenodeify()の実装を参考にした。
nodeの非同期処理関数を簡単にPromiseオブジェクトに変換できる。

動機

非同期処理はQ.jsを今まで使っていたけど、nw.jsでは普通にPromiseが使える。なのでQ.jsは不要になるのだけれども、非同期コールバックをラップするdenodeify()がないとつらいので、同じ機能を持つ関数を作ろうと思った。

実装

function denodeify(nodeFunc){
    var baseArgs = Array.prototype.slice.call(arguments, 1);
    return function() {
        var nodeArgs = baseArgs.concat(Array.prototype.slice.call(arguments));
        return new Promise((resolve, reject) => {
            nodeArgs.push((error, data) => {
                if (error) {
                    reject(error);
                } else if (arguments.length > 2) {
                    resolve(Array.prototype.slice.call(arguments, 1));
                } else {
                    resolve(data);
                }
            });
            nodeFunc.apply(null, nodeArgs);
        });
    }
}

使い方

var fs = require('fs');
var readFile = denodeify(fs.readFile);

readFile('file.txt')
.then((data) => {
   // ToDo
})
.catch ((err) => {
   // エラー処理
});

終わりに

投稿した後で記事をチェックしてたら、同じ目的でコードもほとんど同じものがすでに載っていましたな。。偶然の一致だ。。
コールバックベースの関数をプロミスオブジェクトに変換する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0