码迷,mamicode.com
首页 > Web开发 > 详细

使用async解决nodejs异步问题

时间:2015-06-16 21:25:03      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:


项目要求:1.对用户的煤、水、电的使用金额对用户进行每周短信提醒。

                  2.当爬虫爬来的煤、水、电的剩余金额小于10元时,对用户进行短信提醒。

数据库描诉:mongodb  建了4张表    分别分 每周提醒表、水费表、电费表、煤气表

                      每周提醒表:用户名、用户id、是否开/关提醒功能、用户是否关联煤、水、电、用户电话

                      电费表:用户名、用户id、社区编号、供电公司编号、是否开/关提醒、剩余电费、用户电话、更新时间、上次更新时间、上次更新剩余电费、

遇到问题描诉:使用nodejs开发,实现每周六晚上短信提醒用户功能。

                          通过每周提醒表得到用户的信息、根据信息判断用户是否有煤水电关联,如果关联去对应的煤水电的表里查询,然后将查询信息拼接成新的数据结构返回回来。

                           由于nodejs访问数据库的是异步请求得到数据不完整。所以使用async模块。

解决办法:

             

var  scheduleObj = require(‘node-schedule‘);
var mongoWake = require(‘./mongo/wakeSaturday‘);
var mongoElectric = require(‘./mongo/mongoElectric‘);
var mongoWater = require(‘./mongo/mongoWater‘);
var mongoGas = require(‘./mongo/mongoGas‘);

//引用async模块
var async = require(‘async‘);

exports.schedule = function(){
	var rule = new scheduleObj.RecurrenceRule();
	var times = [];

	 for(var i=1; i<60; i=i+10){
	  times.push(i);
	 }
	//每周6
	 rule.dayOfWeek =6;
	//服务器上使用的是什么时间 是格林尼治时间 还是中国时间
	rule.hour =22;
	rule.second = 0; 
	 var j = scheduleObj.scheduleJob(rule, function(){	 
                //从周提醒的表里取出课题性的用户信息
		mongoWake.getAll(function(err,result){
			// console.log(result);
			if(err){
				return console.log(err);
			}
			//把信息添加到mapseries里需要控制流程逐一接下来的查询
			async.mapSeries(result,function(item,callbackMap){
				item.result={};	
				// item.result[‘electric‘] = 10;
				// item.result[‘water‘] = 30;
				// item.result[‘gas‘] = 60;
				// callbackMap(null,item);
				//需要对查询的信息逐条判断,判断用户是否于煤水电进行关联,并寻要在每张表查询完返回的结果加入最后的result里
				async.waterfall([searchElectric, searchWater, searchGas], function(){
	 			   callbackMap(null, item);
				});

				function searchElectric(done){
					if(item.types.electric){
						console.log(‘electric  balance‘);
						mongoElectric.findById(item.userId,function(err,eleResult){
							// console.log(eleResult[0]);
							// obj.push(eleResult[0]);
							item.result[‘electric‘] = eleResult[0];
							done();
						});
					}else{
						done();
					}
					
				};
				
				function searchWater(done){
					if(item.types.water){
						console.log(‘water  balance‘);
						mongoWater.findById(item.userId,function(err,waterResult){
							item.result[‘water‘] = waterResult[0];
							done();
						});						
					}else{
						done();
					}	
				};
				function searchGas(done){
					if(item.types.gas){
						console.log(‘gas  balance‘);
						mongoGas.findById(item.userId,function(err,gasResult){
							item.result[‘gas‘] = gasResult[0];
							done();
						});
					}else{
						done();
					}
				};
			},function(err, results){
				console.log(results);
				return results;
			});
		});
	});
};

                            


使用async解决nodejs异步问题

标签:

原文地址:http://my.oschina.net/chinacaptain/blog/467455

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!