Node.js で非同期タスクの結果を集約する

Node.js は基本的に非同期処理となりますが、配列をループで回して、それぞれの非同期タスクを集約したい場合には、 以下のように async.reduce を使うことにより集めることができるようになります。

npm install async --save
var async = require('async');
async.reduce(recipients, [], function (list, recipient, done) {
    client.get(recipient, function (err, res) {
        if (!res) {
            list.push(recipient);
        }
        done(null, list);
    });
}, function (err, result) {
    if (err) {
        console.error(err);
    }
}