async 异步编程的应用

async 异步编程的应用

1.为了解决node.js在实际项目中的异步特性,跳出回调大坑。
2.优雅的维护自己的代码。
3.更好的对自己的代码进行流程控制。

async.waterfall

1.async.waterfall(array,function(err,res){})。

array是函数组成的数组,callback(function)是中途出错或者全部执行完后的回调函数。它的特点是串行执行函数,并且前一个函数的结果会传给下一个函数。示例:

    async.waterfall([  
    function(callback){  
    callback(null, 'one', 'two');  
    },  
    function(arg1, arg2, callback){  
    callback(null, 'three');  
    },  
    function(arg1, callback){  
    // arg1 now equals 'three'  
    callback(null, 'done');  
    }  
    ], function (err, result) {  
    // result now equals 'done'      
    });  

async.series

1.ayync.series(array or obj,function(err,res){}).

第一个传参可以是数组或者对象,callback返回执行的结果集,属于串行执行,即按顺序执行传入的function代码。与waterfall的区别在于后者能传参到下一个function进行逻辑操作。不过我们可已通过对变量的赋值达到waterfall同样的效果。

let data = [];
data.push(function(callback){
    callback(null,1);
})
data.push(function(callback){
    //启用定时器,模拟异步操作
    setTimeout(function(){
        callback(null,2);
    },2000)

});
data.push(function(callback){
    callback(null,3);

});

async.series(data,function(err,row){
    console.log(row);
});

// 输出结果 与预期正常:[1,2,3]

async.map and async.each

1.这2个方法感觉用法是一致的 
2.async.map(task,callback,function(err,res){});

task是可以是数组或一个对象,类似与在for循环里面执行闭包操作。都是同时执行多条异步操作

async.mapSeries and async.eachSeries

1.都是按顺序执行操作
2.用法与map,each 一致。

async.auto

1.很多时候,你逻辑里面,既有waterfull的也有parallel的,那个就要写至少2个async函数调用,复杂的情况下,可能更多,但是async.auto的强大是在于,你定义好相互之间的dependencies,他来帮你决定用parallel还是waterfull。
2.async.auto(ojb);

看一个例子:
async.auto({
func1: function (callback, results) {
callback(null, “abc”, “bbc”);
},

func2: function (callback, results) {  
console.log("Print#1:\n" + util.inspect(results));  
callback(null, { "puncha": "during" });  
},  
func3: ["func2", function (callback, results) {  
console.log("Print#2:\n" + util.inspect(results));  
callback(null, 3);  
}],  
func4: ["func1", "func3", function (callback, results) {  
console.log("Print#3:\n" + util.inspect(results));  
callback(null);  
}]  
});  

func1和func2可以并行执行,func3可以和func1并行但是需要等待func2,func4最后执行

结尾

1.以上用法是async比较常用的方法,用上他的话就可以不用担心异步回调大坑了,async不仅可以用于数据库操作,其他异步操作也适用,比如文件读写等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值