複数の非同期処理が両方終わるまで待って結果をまとめて受け取るとか、順番に実行とかできる。


2つHTTPリクエスト同時に使って結果をまとめて受け取る例

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

async.parallel(
  [function(exit){
    request.get('http://shokai.org', function(err, res, body){
      if(err) exit('HTTP Request Error');
      if(res.statusCode != 200) exit('HTTP Status ('+res.statusCode+')');
      exit(null, body);
    });
  }, function(exit){
    request.get('http://masui.sfc.keio.ac.jp', function(err, res, body){
      if(err) exit('HTTP Request Error');
      if(res.statusCode != 200) exit('HTTP Status ('+res.statusCode+')');
      exit(null, body);
    });
  }], function(err, results){
    if(err) throw err;
    console.log(results[0].match(/<title>(.+)<\/title>/i)[1]);
    console.log(results[1].match(/<title>(.+)<\/title>/i)[1]);
  }
);
配列の中に2つのfunctionが入っていて、両者でexitという名前で使っている第一引数がエラー、第二引数が結果のコールバックを呼ぶとasync.parallelの第二匹数に指定した関数にまとまる。

parallelの他にseriesとwaterfallがある。


実行結果

shokai.org - 橋本商会
Masui Lab.


参考