情報アイランド

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

Node.jsで複数の非同期的な処理を競合させる

複数の非同期的な処理を競合させるというのは、複数の非同期的な処理を完全に並列的に実行し、何れか1つが最初に完了した場合にコールバック関数を呼び出すということです。

これにはasyncモジュールのasync.race関数を使用します。

なお、何れか1つの処理が完了したり、処理の実行中にエラーが発生したりしても他の処理の実行は続行しますので注意してください。

async.race関数

var async = require('async');

async.race([
    function (callback) {
        callback(null, 'xxx');
        //or
        callback(new Error('yyy'), null);
    }, 
    function (callback) {
        callback(null, 'aaa');
        //or
        callback(new Error('bbb'), null);
    }
], function (err, result) {
});

第1引数

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

この関数の第1引数はコールバック関数です。

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

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

第2引数

第2引数に何れか1つの処理が最初に完了したか、処理の実行中にエラーが発生した場合に呼び出されるコールバック関数を指定します。

この関数の第1引数はエラーオブジェクトであり、第2引数は最初に完了した処理の結果です。

サンプルコード1

async-race.js

var async = require('async');

async.race([
    function (callback) {
        setTimeout(function () {
            console.log('function - foo');
            callback(null, 'foo');
        }, 1000);
    }, 
    function (callback) {
        setTimeout(function () {
            console.log('function - bar');
            callback(null, 'bar');
        }, 500);
    }
], function (err, result) {
    console.log(result);
});

使用パッケージ

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

実行結果

C:\work\node>node async-race.js
function - bar
bar
function - foo

関連

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

-Node.js