Node.jsで複数の非同期的な処理を合成する
目次
複数の非同期的な処理を合成するにはasync
モジュールの下のような関数を使用します。
async.compose
関数async.seq
関数
最後の引数の処理から最初の引数の処理に向かって処理を実行するような合成を行うにはasync.compose
関数を使用し、最初の引数の処理から最後の引数の処理に向かって処理を実行するような合成を行うにはasync.seq
関数を使用します。
async.compose関数とasync.seq関数
var async = require('async');
var f = async.compose(function (x, callback) {
callback(null, 'aaa');
//or
callback(new Error('bbb'), null);
}, function (x, callback) {
callback(null, 'ccc');
//or
callback(new Error('ddd'), null);
});
var f = async.seq(function (x, callback) {
callback(null, 'aaa');
//or
callback(new Error('bbb'), null);
}, function (x, callback) {
callback(null, 'ccc');
//or
callback(new Error('ddd'), null);
});
第1引数以降
第1引数以降に複数の非同期的な処理を関数として指定します。
この関数の第1引数は処理に対する入力であり、第2引数はコールバック関数です。
処理が完了した場合や処理の実行中にエラーが発生した場合には必ずこのコールバック関数を呼び出さなければなりません。
このコールバック関数の第1引数にはエラーオブジェクト(エラーが発生しなかった場合にはnull
)を指定し、第2引数には処理の結果(エラーが発生した場合にはnull
)を指定します。
返り値
返り値として合成された非同期的な処理が関数として得られます。
この関数の第1引数には処理に対する入力を指定し、第2引数にはコールバック関数を指定します。
このコールバック関数の第1引数はエラーオブジェクトであり、第2引数は処理の結果です。
そのため、返り値の関数は下のように呼び出すことができます。
f('xxx', function (err, result) {
});
サンプルコード1
async.compose
関数の使用例です。
async-compose.js
var async = require('async');
var f = async.compose(function (x, callback) {
process.nextTick(function () {
console.log(x);
callback(null, x + 5);
});
}, function (x, callback) {
process.nextTick(function () {
console.log(x);
callback(null, x * 10);
});
});
f(3, function (err, result) {
if (err) {
console.error(err);
process.exit(1);
}
else {
console.log(result);
}
});
使用パッケージ
- Async.js
npm install async
でインストールします。
実行結果
C:\work\node>node async-compose.js
3
30
35
サンプルコード2
async.seq
関数の使用例です。
async-seq.js
var async = require('async');
var f = async.seq(function (x, callback) {
process.nextTick(function () {
console.log(x);
callback(null, x + 5);
});
}, function (x, callback) {
process.nextTick(function () {
console.log(x);
callback(null, x * 10);
});
});
f(3, function (err, result) {
if (err) {
console.error(err);
process.exit(1);
}
else {
console.log(result);
}
});
使用パッケージ
- Async.js
npm install async
でインストールします。
実行結果
C:\work\node>node async-seq.js
3
8
80
関連

スポンサーリンク