情報アイランド

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

Node.jsで書き込みストリームをプロミスに変換する

書き込みストリームをプロミスに変換するには

  • 書き込みストリームへのデータの書き込みが完了した時に完了状態に変わり、
  • 書き込みストリームの処理においてエラーが発生した時にエラー状態に変わる

プロミスを作成します。

したがって、書き込みストリームをプロミスに変換する関数は下のように実装することができます。

なお、この関数ではプロミスクラスとしてbluebirdモジュールのbluebirdクラスを使用しています。

var bluebird = require('bluebird');

function wstream2promise (stream) {
    return new bluebird(function (resolve, reject) {
        stream.on('finish', function () {
            resolve();
        });
        stream.on('error', function () {
            reject();
        });
    });
};

サンプルコード1

3つ目のコマンドライン引数として与えられたテキストファイルにデータをストリームとプロミスを使用して書き込みます。

wstream2promise.js

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

if (process.argv.length < 3) {
    console.error('lack argument.');
    process.exit(1);
}

var ws = fs.createWriteStream(process.argv[2], 'utf-8');
wstream2promise(ws).then(function () {
    console.log('finished!!');
}).catch(function (err) {
    console.error(err);
    process.exit(1);
});

ws.write('this ');
ws.write('is ');
ws.write('a ');
ws.write('string');
ws.write('.\r\n');
ws.end();

function wstream2promise (stream) {
    return new bluebird(function (resolve, reject) {
        stream.on('finish', function () {
            resolve();
        });
        stream.on('error', function () {
            reject();
        });
    });
};

使用パッケージ

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

実行結果

C:\work\node>node wstream2promise.js ws2p.txt
finished!!

C:\work\node>type ws2p.txt
this is a string.

関連

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

-Node.js