node.js的async模块

node.js中有一个异步模块async,用于流程控制,下面就来看下

async.series([function(callback){console.log(1);setTimeout(()=>{
    callback(null,'1')
},1000)},
function(callback){console.log(2);setTimeout(()=>{callback(null,'2')},1000)}],(err,result)=>{
    console.log(result)
    console.log(err)})
/*1
2
[ '1', '2' ]
null
*/

首先是series方法,它接收两个参数,一个是函数数组,一个是回调函数,数组中的函数接受一个callback函数,只有调用这个callback函数,下一个函数才能执行,如果callback函数报错,则后面的函数不会执行,回调函数接收两个参数,它是错误优先的回调函数,err接收callback的第一个参数,result接收callback的第二个参数,组成一个数组,。例如

async.series([function(callback){console.log(1);setTimeout(()=>{
    callback('false','1')
},1000)},
function(callback){console.log(2);setTimeout(()=>{callback(null,'2')},2000)}],(err,result)=>{
   console.log(result)
    console.log(err)})
/*
1
[ '1' ]
false
*/

然后是parallel方法,他会执行完数组中的全部函数,即使callback函数报错,如果报错,会把错误信息传给回调函数的第一个参数,然后执行回调函数,最后再执行函数数组中的其他函数


async.parallel([function(callback){console.log(1);
    callback('false','1')
},
function(callback){console.log(2);callback(null,'2')}],(err,result)=>{
    //console.log(result)
    console.log(err)
})
/*
1
false
2
*/

还有一个是waterfall,可以将前一个函数的输出作为后一个函数的输入

async.waterfall([function(callback){
    console.log('a')
    callback(null,'b')
},function(arg,callback){
    console.log(arg)
    callback(null,'c')
}],(err,result)=>{console.log(err)
    console.log(result)
})

/*
a
b
null
c
*/

如果有一个callback函数报错,后面的也不会执行,直接执行回调函数

async.waterfall([function(callback){
    console.log('a')
    callback('false','d')
},function(arg,callback){
    console.log(arg)
    callback(null,'c')
}],(err,result)=>{console.log(err)
    console.log(result)
})

/*
a
false
d
*/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值