情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでモジュールをプロミス対応にする

モジュールをプロミス対応にするにはプロミスクラスのpromisifyAll関数を使用します。

この関数はモジュールの全ての関数に対応するプロミスを返す関数をモジュールに追加します。

promisifyAll関数は下のプロミスクラスで提供されています。

  • bluebirdクラス
var bluebird = require('bluebird');

var xxx = bluebird.promisifyAll(require('xxx'), {
    suffix: 'yyy', 
    multiArgs: false, 
    filter: function (name, func, target, passesDefaultFilter) {
    }, 
    promisifier: function (originalFunction, defaultPromisifier) {
    }
});

第1引数にモジュールを指定します。

第2引数にオプションをオブジェクトとして指定します。

主なオプションには下のようなものがあります。

  • suffix・・・プロミスを返す関数の名称の接尾辞です。プロミスを返す関数の名称は対応するモジュールの関数の名称に接尾辞を付加したものになります。デフォルトはAsyncです。
  • multiArgs・・・プロミスを返す関数が返すプロミスの結果を配列にするかを真偽値として指定します。デフォルトはfalseです。falseの場合、モジュールの関数の非同期コールバック関数が複数の結果を受け取る場合には最初のもののみがプロミスの結果となり、それ以外は無視されます。trueの場合、全てがプロミスの結果となります。この時、プロミスの結果は全ての結果を順番に格納する配列となります。
  • filter・・・プロミス対応を行うモジュールの関数を選択する処理を関数として指定します。この関数の第1引数はモジュールの関数の名称であり、第2引数はモジュールの関数であり、第3引数はモジュールであり、第4引数はデフォルトの選択処理において関数が選択されるかです。この関数では返り値として関数のプロミス対応を行う場合にはtrueを返し、行わない場合にはfalseを返すようにします。
  • promisifier・・・プロミスを返す関数を作成する処理を関数として指定します。この関数の第1引数はモジュールの関数であり、第2引数はデフォルトの作成処理において作成されたプロミスを返す関数です。この関数では返り値としてプロミスを返す関数を返すようにします。

返り値としてモジュールが得られます。

サンプルコード1

p.txtという名称のファイルにテキストデータを書き込み、そのファイルからテキストデータを読み込み、標準出力に出力します。

bluebird-promisify-all.js

var bluebird = require('bluebird');
var fs = bluebird.promisifyAll(require('fs'));

fs.writeFileAsync('p.txt', 'テキスト', 'utf-8').then(function (__) {
    return fs.readFileAsync('p.txt', 'utf-8');
}).done(function (data) {
    console.log(data);
}, function (err) {
    console.error(err);
    process.exit(1);
});

使用パッケージ

  • Bluebird
    npm install bluebirdでインストールします。

実行結果

C:\work\node>node bluebird-promisify-all.js
テキスト

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js