Node.js异步库async

https://www.npmjs.com/package/async

PART 1

http://yijiebuyi.com/blog/be234394cd350de16479c583f6f6bcb6.html

本篇算是async库的速查手册吧,详细学习参考一下上面贴的链接
这个是aearly写的async库,和ES6自带的async不是一个东西

串行 无关联 async.series

函数依次执行,后面不需要调前面步骤的结果

async.series(
    { 
        func1: function(done){
        //done(err, 参数): 将参数写入results.func1
            done(err, 数据1) //results.func1 = 数据1
            done(err, 数据1, 数据2) //表现为数组,results.func1 = [数据1, 数据2]
        }, 
        func2: function(done){ 
            done(err, 参数)
        }, 
    },
    function(error, results){ 
        //results.func1, results.func2...
    }
});

串行 有关联 async.waterfall

函数依次执行,后面需要调前面步骤的结果

async.waterfall(
    [
        function(done){
        done(err, 结果) //将结果写入result
    }, 
    function(result, done){ 
        //result即上一步写入的结果
        done(err, 返回结果)
    }, 
],
function(error, result){});

并行 async.parallel

某步出错不影响其他步骤执行,最后结果中的error是第一个出现的error

async.parallel(
    { 
        func1: function(done){
            done(err, results)
        }, 
        func2: function(done){ 
            done(err, results)
        }, 
    }, function(error, results){});

自动 async.auto

和series格式一样,根据依赖关系自动控制串行、并行
2.0版本前回调里的参数是(done, results),2.0及之后的版本统一把done作为最后一个参数,即(results, done)

async.auto(
    {
        func1: function(done){
            done(err, 要写入func1的结果)
        }, 
        func2: ["func1", function(results, done){ //依赖func1
            //results = {func1: xxx};
            done(err, 返回结果)
        }],
        func3: ["func2", function(results, done){
        }]
    }, function(error, results){ 
        results = {func1: xxx, func2: xxx, func3: xxx};
    }
});

PART2

http://stackoverflow.com/questions/10390041/node-js-using-the-async-lib-async-foreach-with-object#

异步for循环 async.forEach

async.forEach(list, function(item, done)
    {
        //操作item
        done(); //通知for本循环完成
    }, function(err){
    //for之后执行的函数
});

async.forEachOf

async.forEachOf(obj, function (value, key, callback) {})
//用法和上面forEach一样,只是参数多了一个参数,表示被遍历value的index

你可能感兴趣的:(Node.js异步库async)