情報アイランド

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

Node.jsで非同期的な処理を実行するカーゴを作成する

非同期的な処理を実行するカーゴを作成するにはasyncモジュールのasync.cargo関数を使用します。

async.cargo関数

var async = require('async');

var c = async.cargo(function (datas, callback) {
    callback(null);
    //or
    callback(err);
}, 10);

第1引数

第1引数に非同期的な処理を関数として指定します。

この関数の第1引数は非同期的な処理の複数のパラメータであり、第2引数はコールバック関数です。

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

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

第2引数

第2引数にペイロードを指定します。この引数は指定しなくても構いません。デフォルトはInfinityです。

第1引数の非同期的な処理には最大でペイロード分のパラメータが与えられます。

すなわち、たとえば、ペイロードが10である場合には最大で10個のパラメータが非同期的な処理に与えられます。10個を超える未完了の非同期的な処理がある場合には10個を超える分に関してはカーゴに格納され、実行が待機されます。

返り値

返り値としてカーゴを表すオブジェクトが得られます。

このオブジェクトは主に下のようなプロパティを含みます。

  • length・・・実行を待機している非同期的な処理の数を返す関数です。
  • payload・・・ペイロードです。このプロパティの値を変更することによってペイロードを変更することができます
  • push・・・新しい非同期的な処理をカーゴの末尾に追加する関数です。第1引数に非同期的な処理のパラメータを指定します。第2引数にコールバック関数を指定します。第2引数は指定しなくても構いません。このコールバック関数の第1引数はエラーオブジェクトです。
  • pause・・・カーゴの動作を停止する関数です。
  • resume・・・カーゴの動作を再開する関数です。

サンプルコード1

async-cargo.js

var async = require('async');
var util = require('util');

var c = async.cargo(function (datas, callback) {
    for (var i = 0; i < datas.length; i++) {
        util.log(datas[i]);
        console.log('length: ' + c.length());
        var r = Math.random();
        if (r < 0.5) {
            c.push(r);
        }
    }
    setTimeout(function () {
        callback(null);
    }, 1000);
}, 2);
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());
c.push(Math.random());

使用パッケージ

  • Async.js
    npm install asyncでインストールします。

実行結果

C:\work\node>node async-cargo.js
21 Jul 11:29:39 - 0.3315112221969456
length: 8
21 Jul 11:29:39 - 0.4700992256890195
length: 9
21 Jul 11:29:40 - 0.8340895160869755
length: 8
21 Jul 11:29:40 - 0.755287999026645
length: 8
21 Jul 11:29:41 - 0.9267543087052916
length: 6
21 Jul 11:29:41 - 0.38246674124141733
length: 7
21 Jul 11:29:42 - 0.07432798248944406
length: 6
21 Jul 11:29:42 - 0.017092827525674315
length: 6
21 Jul 11:29:43 - 0.7300317748745848
length: 5
21 Jul 11:29:43 - 0.7435417999542455
length: 6
21 Jul 11:29:44 - 0.17432580907136197
length: 4
21 Jul 11:29:44 - 0.014350420495830685
length: 4
21 Jul 11:29:45 - 0.48390363156656035
length: 3
21 Jul 11:29:45 - 0.10731997301180995
length: 3
21 Jul 11:29:46 - 0.26073811620843124
length: 1
21 Jul 11:29:46 - 0.2787064553655709
length: 1
21 Jul 11:29:47 - 0.0048826235683694375
length: 0
21 Jul 11:29:47 - 0.02006433899242288
length: 0

関連

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

-Node.js