nodejs的同步工作插件async实际应用记录

前言

在使用nodejs使用过程中经常需要进行callback很多层才能完成最终功能,嵌套太深。这里使用async插件来替代嵌套。

我常用的async方法说明。async插件API位置https://github.com/caolan/async

series

series(task[, callback]);

  • task - 一个包含需要运行函数function的集合,每个函数都必须有一个callback(err, result)函数作为参数。
  • callback(err, result) – 当所有task函数执行完成之后将回调它,这个函数将得到一个result数组或对象,包含所有task通过自身回调函数传入的result。

例如:

async.series([
    function(callback){
        // do some stuff ...
        callback(null, 'one');
    },
    function(callback){
        // do some more stuff ...
        callback(null, 'two');
    }
],
// optional callback
function(err, results){
    // results is now equal to ['one', 'two']
});


// an example using an object instead of an array
async.series({
    one: function(callback){
        setTimeout(function(){
            callback(null, 1);
        }, 200);
    },
    two: function(callback){
        setTimeout(function(){
            callback(null, 2);
        }, 100);
    }
},
function(err, results) {
    // results is now equal to: {one: 1, two: 2}
});

each

each(coll, iteratee[, callback])

主要作用就是迭代coll中的元素,进行处理。

//存放每个房间中的所有card和jiracard,计算总的工作时间
var result = [];
async.eachSeries(rooms, function (room, done) {
	db.getAllCards('/' + room, function (res) {
		db.getAllJiraCards('/'+ room, function(jiraCards){
			var cards = res.concat(jiraCards);
			var totalTime = 0;
			if (cards != null && cards.length > 0) {

				for (var j = 0; j < cards.length; j++) {
					if(cards[j].statusIndex != 2){
						continue;
					}
					//调用了一个公共模块,主要是进行时间计算,可以忽略
					totalTime += util.calculateTime(cards[j].workTime);
				}
			}
			//在每一而room执行完成之后就将结果放入到result结果集中,因为这里的done回调函数
			//作用不大,我没有发现他的作用。
			result.push({room: room, totalTime: totalTime});
			done(null);
		});
	});
}, function (err) {
	//回调
	callback(result);
});

以上是在工作过程中用到的两种处理方式。根据api你可以选择一种适合自己的方式来完成相关工作。

 

转载于:https://my.oschina.net/u/1176977/blog/672652

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值