nodejs使用eventproxy和async控制并发

如果我想读取三个文件的内容并把其整合到一起后再执行操作,因为nodejs是异步的,所以如果这样写:

fs.readFile('a.txt','utf-8',function(err,data){})
fs.readFile('b.txt','utf-8',function(err,data){})
fs.readFile('c.txt','utf-8',function(err,data){})

但因为不知道哪一个最后执行完,所以操作代码不知道该加到哪一个函数中

解决这个问题的第一个方法就是加一个计数器:

var count=0
fs.readFile('a.txt','utf-8',function(err,data){
    count++
    if(count===3){/*执行操作*/}
})
fs.readFile('b.txt','utf-8',function(err,data){
    count++
    if(count===3){/*执行操作*/}
})
fs.readFile('c.txt','utf-8',function(err,data){
    count++
    if(count===3){/*执行操作*/}
})

第二种方法是使用eventproxy:

var eventproxy=require('eventproxy')
var ep=new eventproxy()
ep.after('icon',arrs.length,function(res){
    //res是每一个ep.emit传进来的的数据的数组
})
//当icon行为执行了arrs.length次操作后执行后续操作
ep.emit('icon',data)
//data为要传进res的数据

第三种是async控制并发,可以控制并发数

async.mapLimit(items,2,function(item,callback){
    //并发传入2个item进行操作
    callback(null,data)
    //data会传入到下一个回掉函数的result数组中
},function(err,result){})

举一个具体例子:

ar async=require('async')

var test=function(item,callback){
    setTimeout(function(){
        console.log(item+'ok')
        callback(null,item+'result')
    },2000)
}

var items=[1,2,3,4,5,7,8,9,10]

async.mapLimit(items,2,function(item,callback){
    test(item,callback)
},function(err,result){
    console.log(result)
})

会输出:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值