情報アイランド

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

Node.jsで変換処理から変換ストリームを作成する

変換処理から変換ストリームを作成するにはthrough2-mapモジュールのthrough2Map関数やmap-streamモジュールのmapStream関数を使用します。

through2Map関数

var through2Map = require('through2-map');

var transform = through2Map({
    objectMode: false, 
    readableObjectMode: false, 
    writableObjectMode: false, 
    highWaterMark: 16384, 
    decodeStrings: true, 
    encoding: null, 
    allowHalfOpen: true, 
    wantStrings: true
}, function (chunk, index) {
    return 'xxx';
});

第1引数にオプションをオブジェクトとして指定します。このオプションはstream.Transformクラスのコンストラクタの第1引数のオプションと同じです。この引数は指定しなくても構いません。

ただし、wantStringsオプションを指定することもできます。このオプションには変換処理に渡すデータを文字列化するかを真偽値として指定します。

第2引数に変換処理を関数として指定します。この関数の第1引数は変換前のデータであり、第2引数はデータのインデックスです。この関数では返り値として変換後のデータを返すようにします。

返り値として変換ストリームが得られます。

mapStream関数

var mapStream = require('map-stream');

var transform = mapStream(function (data, callback) {
    callback(null, 'xxx');
    //or
    callback(new Error('yyy'), null);
}, {
    failures: false
});

第1引数に変換処理を関数として指定します。この関数の第1引数は変換前のデータであり、第2引数はコールバック関数です。

変換処理が完了した場合や変換処理の実行中にエラーが発生した場合には必ずこのコールバック関数を呼び出さなければなりません。

このコールバック関数の第1引数にはエラーオブジェクト(エラーが発生しなかった場合にはnull)を指定し、第2引数には変換後のデータを指定します(エラーが発生した場合にはnullを指定します)。

第2引数にオプションをオブジェクトとして指定します。この引数は指定しなくても構いません。

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

  • failures・・・エラーが発生した場合に処理を中断するかを真偽値として指定します。デフォルトはfalseです。

返り値として変換ストリームが得られます。

サンプルコード1

through2Map関数の使用例です。

through2-map.js

var through2Map = require('through2-map');

var transform = through2Map({
    objectMode: true
}, function (chunk, index) {
    console.log('index is ' + index + '.');
    return chunk * index;
});

transform.on('data', function (r) {
    console.log(r);
});

transform.write(10);
transform.write(21);
transform.write(32);
transform.write(43);
transform.write(54);
transform.write(65);
transform.write(76);
transform.write(87);
transform.write(98);
transform.end();

使用パッケージ

  • through2-map
    npm install through2-mapでインストールします。

実行結果

C:\work\node>node through2-map.js
index is 0.
0
index is 1.
21
index is 2.
64
index is 3.
129
index is 4.
216
index is 5.
325
index is 6.
456
index is 7.
609
index is 8.
784

サンプルコード2

mapStream関数の使用例です。

map-stream.js

var mapStream = require('map-stream');

var index = 0;
var transform = mapStream(function (data, callback) {
    console.log('index is ' + index + '.');
    callback(null, data * index);
    index++;
});

transform.on('data', function (r) {
    console.log(r);
});

transform.write(10);
transform.write(21);
transform.write(32);
transform.write(43);
transform.write(54);
transform.write(65);
transform.write(76);
transform.write(87);
transform.write(98);
transform.end();

使用パッケージ

  • MapStream
    npm install map-streamでインストールします。

実行結果

C:\work\node>node map-stream.js
index is 0.
0
index is 1.
21
index is 2.
64
index is 3.
129
index is 4.
216
index is 5.
325
index is 6.
456
index is 7.
609
index is 8.
784

関連

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

-Node.js