【javascript】順番に非同期処理を実行する。

async.jsというライブラリを用いる。nodeでよく使われているらしい。

npm install async --saveでインストール


下記のコードで各URLに対して画像を取得してくる処理を実行できる。

test.js

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

var urls = ['URL1',
    'URL2',
    'URL3'
];


async.each(urls, function(url, callback){
    request({
            method: 'GET',
            url: url,
            encoding: null
        },
        function(error, response, body) {
            var filename = getFilename(url);
            if (!error && response.statusCode === 200) {
                fs.writeFileSync('./img/a' + filename + '.png', body, 'binary');
                console.log("loop:" + filename);
            }

            // 次のリクエストを呼ぶ。
            callback(null, filename);
        }
    );

}, function(err, results) {
    if (err) {
        throw err;
    }
    console.log('series all done. ');
});

function getFilename(url) {
    var temp = url.split('/');
    return temp[temp.length - 1 ];
}