var arr = [{
    name: 'Jack',
    delay: 200
}, {
    name: 'Mike',
    delay: 100
}, {
    name: 'Freewind',
    delay: 300
}];

each

async.each(coll, iterate, [callback])

所有操作并发执行,且全部未出错,最终得到的err为undefined。注意最终callback只有一个参数err。
如果中途出错,则出错后马上调用最终的callback。其它未执行完的任务继续执行

async.each(arr, (item, callback) => {
    setTimeout(() => {
        console.log(item.name);
        callback(null, item.name);
    }, item.delay);
}, (err) => console.log(err));

eachSeries

async.eachSeries(coll, 迭代, [callback])

与each相似,但不是并行执行。而是一个个按顺序执行
如果中途出错,则马上把错误传给最终的callback,还未执行的不再执行

async.eachSeries(arr, (item, callback) => {
    setTimeout(() => {
        console.log(item.name);
        callback(null, item.name);
    }, item.delay);
}, (err) => console.log(err));

eachLimit

async.eachLimit(coll, limit, iterate, [callback])

分批执行,第二个参数是每一批的个数。每一批内并行执行,但批与批之间按顺序执行
如果中途出错,错误将马上传给最终的callback。同一批中的未执行完的任务还将继续执行,但下一批及以后的不再执行。

async.eachLimit(arr, 2, (item, callback) => {
    setTimeout(() => {
        console.log(item.name);
        callback(null, item.name);
    }, item.delay);
}, (err) => {
    console.log(err);
});

forEachOf

async.forEachOf(coll, iteratee, [callback])

var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
var configs = {};

async.forEachOf(obj, function (value, key, callback) {
    setTimeout(() => {
        configs[key] = "http://www.baidu.com"+value;
        callback();
    }, 1000);
}, function (err) {
    if (err) console.error(err.message);
    console.log(configs);
});

forEachOfSeries

async.forEachOfSeries(coll, iteratee, [callback])

forEachOfLimit

async.forEachOfLimit(coll, limit, iteratee, [callback])