Skip to content

Commit 8b456af

Browse files
committed
使用async,优化异步回调
1 parent 6c269c7 commit 8b456af

File tree

6 files changed

+225
-84
lines changed

6 files changed

+225
-84
lines changed

models/topic.js

+180-74
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
var mongodb = require('./db');
66
var connect=require('./connect');
7-
7+
var async = require('async');
88
var topic={};
99

1010
module.exports = topic;
@@ -13,7 +13,7 @@ module.exports = topic;
1313
//添加新话题
1414
topic.addTopic=function(obj,callback){
1515
global.db.collection('topic',function(err,collection){
16-
//增加一个自增uid,官方有优化
16+
//增加一个自增uid,官方有优化,如果有删除操作,会导致bug
1717
collection.find().sort({_id: -1}).limit(1).toArray(function(err,items){
1818
if(items.length>0){
1919
obj.uid=items[0].uid+1;
@@ -54,31 +54,65 @@ topic.myTopic=function(name,size,num,callback){
5454
//用户关注对象的话题
5555
topic.aboutTopic=function(name,size,num,callback){
5656
//先查找这个用户关注对象
57-
global.db.collection('user',function(err,collection){
58-
collection.findOne({name:name},function(err,obj){
59-
if(!err){
60-
if(obj.watch.length>0){
61-
//存在关注用户
62-
var arr=[];
63-
obj.watch.forEach(function(k){
64-
arr.push({name:k});
65-
});
66-
//在topic中查找他关注用户的话题
67-
global.db.collection('topic',function(err,collection){
68-
collection.find({$or:arr}).sort({_id: -1}).skip(num).limit(size).toArray(function(err,items){
69-
if(err){
70-
callback({isOk:false});
71-
}else{
72-
callback({isOk:true,data:items});
73-
}
74-
});
75-
});
76-
}else{
77-
callback({isOk:true,data:[]});
78-
}
79-
}
80-
});
81-
});
57+
// global.db.collection('user',function(err,collection){
58+
// collection.findOne({name:name},function(err,obj){
59+
// if(!err){
60+
// if(obj.watch.length>0){
61+
// //存在关注用户
62+
// var arr=[];
63+
// obj.watch.forEach(function(k){
64+
// arr.push({name:k});
65+
// });
66+
// //在topic中查找他关注用户的话题
67+
// global.db.collection('topic',function(err,collection){
68+
// collection.find({$or:arr}).sort({_id: -1}).skip(num).limit(size).toArray(function(err,items){
69+
// if(err){
70+
// callback({isOk:false});
71+
// }else{
72+
// callback({isOk:true,data:items});
73+
// }
74+
// });
75+
// });
76+
// }else{
77+
// callback({isOk:true,data:[]});
78+
// }
79+
// }
80+
// });
81+
// });
82+
83+
async.waterfall([
84+
function(cb){
85+
//先查找这个用户关注对象
86+
global.db.collection('user',function(err,collection){
87+
collection.findOne({name:name},function(err,obj){
88+
if(!err){
89+
if(obj.watch.length>0){
90+
//存在关注用户
91+
var arr=[];
92+
obj.watch.forEach(function(k){
93+
arr.push({name:k});
94+
cb(null, arr);
95+
});
96+
}else{
97+
callback({isOk:true,data:[]});
98+
}
99+
}
100+
});
101+
});
102+
},
103+
function(arr,cb){
104+
//在topic中查找他关注用户的话题
105+
global.db.collection('topic',function(err,collection){
106+
collection.find({$or:arr}).sort({_id: -1}).skip(num).limit(size).toArray(function(err,items){
107+
if(err){
108+
callback({isOk:false});
109+
}else{
110+
callback({isOk:true,data:items});
111+
}
112+
});
113+
});
114+
}
115+
]);
82116
};
83117

84118
//@ 股票的话题
@@ -97,32 +131,67 @@ topic.stockTopic=function(uid,stockName,size,num,callback){
97131
//用户关注的股票的相关话题
98132
topic.aboutStockTopic=function(name,size,num,callback){
99133
//先查找这个用户关注的股票
100-
global.db.collection('user',function(err,collection){
101-
collection.findOne({name:name},function(err,obj){
102-
if(!err){
103-
if(!!obj&&obj.stock.length>0){
104-
//存在关注
105-
var arr=[];
106-
//这里只能查询sh600171这种code代码
107-
obj.stock.forEach(function(k){
108-
arr.push({aboutStockcode:k});
109-
});
110-
//在topic中查找他关注用户的话题
111-
global.db.collection('topic',function(err,collection){
112-
collection.find({$or:arr}).sort({_id: -1}).skip(num).limit(size).toArray(function(err,items){
113-
if(err){
114-
callback({isOk:false});
115-
}else{
116-
callback({isOk:true,data:items});
117-
}
118-
});
119-
});
120-
}else{
121-
callback({isOk:true,data:[]});
122-
}
123-
}
124-
});
125-
});
134+
// global.db.collection('user',function(err,collection){
135+
// collection.findOne({name:name},function(err,obj){
136+
// if(!err){
137+
// if(!!obj&&obj.stock.length>0){
138+
// //存在关注
139+
// var arr=[];
140+
// //这里只能查询sh600171这种code代码
141+
// obj.stock.forEach(function(k){
142+
// arr.push({aboutStockcode:k});
143+
// });
144+
// //在topic中查找他关注用户的话题
145+
// global.db.collection('topic',function(err,collection){
146+
// collection.find({$or:arr}).sort({_id: -1}).skip(num).limit(size).toArray(function(err,items){
147+
// if(err){
148+
// callback({isOk:false});
149+
// }else{
150+
// callback({isOk:true,data:items});
151+
// }
152+
// });
153+
// });
154+
// }else{
155+
// callback({isOk:true,data:[]});
156+
// }
157+
// }
158+
// });
159+
// });
160+
161+
async.waterfall([
162+
function(cb){
163+
//先查找这个用户关注的股票
164+
global.db.collection('user',function(err,collection){
165+
collection.findOne({name:name},function(err,obj){
166+
if(!err){
167+
if(!!obj&&obj.stock.length>0){
168+
//存在关注
169+
var arr=[];
170+
//这里只能查询sh600171这种code代码
171+
obj.stock.forEach(function(k){
172+
arr.push({aboutStockcode:k});
173+
});
174+
cb(null,arr);
175+
}else{
176+
callback({isOk:true,data:[]});
177+
}
178+
}
179+
});
180+
});
181+
},
182+
function(arr,cb){
183+
//在topic中查找他关注用户的话题
184+
global.db.collection('topic',function(err,collection){
185+
collection.find({$or:arr}).sort({_id: -1}).skip(num).limit(size).toArray(function(err,items){
186+
if(err){
187+
callback({isOk:false});
188+
}else{
189+
callback({isOk:true,data:items});
190+
}
191+
});
192+
});
193+
}
194+
]);
126195
};
127196

128197
//@ 我的话题
@@ -143,29 +212,66 @@ topic.atmeTopic=function(name,size,num,callback){
143212
*/
144213
//添加话题的评论
145214
topic.addComment=function(isForward,obj,callback){
146-
global.db.collection('comment',function(err,collection){
147-
collection.insert(obj,{safe: true},function(err,topicItem){
148-
if(!err){
149-
if(isForward){
150-
//topic 评论量+1,转发+1操作
151-
global.db.collection('topic',function(err,collection){
152-
var pid=Number(obj.pid);
153-
collection.update({uid:pid},{$inc:{comment:1,forward:1}},function(err,items){
154-
callback({isOk:true,data:topicItem,add:"commentAndForward"});
155-
});
215+
// global.db.collection('comment',function(err,collection){
216+
// collection.insert(obj,{safe: true},function(err,topicItem){
217+
// if(!err){
218+
// if(isForward){
219+
// //topic 评论量+1,转发+1操作
220+
// global.db.collection('topic',function(err,collection){
221+
// var pid=Number(obj.pid);
222+
// collection.update({uid:pid},{$inc:{comment:1,forward:1}},function(err,items){
223+
// callback({isOk:true,data:topicItem,add:"commentAndForward"});
224+
// });
225+
// });
226+
// }else{
227+
// //topic 评论量+1操作
228+
// global.db.collection('topic',function(err,collection){
229+
// var pid=Number(obj.pid);
230+
// collection.update({uid:pid},{$inc:{comment:1}},function(err,items){
231+
// callback({isOk:true,data:topicItem,add:"comment"});
232+
// });
233+
// });
234+
// }
235+
// }
236+
// });
237+
// });
238+
239+
//异步执行
240+
async.parallel([
241+
function(cb){
242+
//将评论插入comment表
243+
global.db.collection('comment',function(err,collection){
244+
collection.insert(obj,{safe: true},function(err,topicItem){
245+
cb(null, topicItem);
246+
});
247+
});
248+
},
249+
function(cb){
250+
//同时更新topic表中被评论的部分
251+
if(isForward){
252+
//topic 评论量+1,转发+1操作
253+
global.db.collection('topic',function(err,collection){
254+
var pid=Number(obj.pid);
255+
collection.update({uid:pid},{$inc:{comment:1,forward:1}},function(err,items){
256+
cb(null,"commentAndForward");
257+
//callback({isOk:true,data:topicItem,add:"commentAndForward"});
156258
});
157-
}else{
158-
//topic 评论量+1操作
159-
global.db.collection('topic',function(err,collection){
160-
var pid=Number(obj.pid);
161-
collection.update({uid:pid},{$inc:{comment:1}},function(err,items){
162-
callback({isOk:true,data:topicItem,add:"comment"});
163-
});
259+
});
260+
}else{
261+
//topic 评论量+1操作
262+
global.db.collection('topic',function(err,collection){
263+
var pid=Number(obj.pid);
264+
collection.update({uid:pid},{$inc:{comment:1}},function(err,items){
265+
cb(null,"comment");
266+
//callback({isOk:true,data:topicItem,add:"comment"});
164267
});
165-
}
166-
}
167-
});
168-
});
268+
});
269+
}
270+
}
271+
],
272+
function(err, results){
273+
callback({isOk:true,data:results[0],add:results[1]});
274+
});
169275
};
170276

171277
//获取话题的评论

models/user.js

+35-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
/*
22
用户信息数据库
33
*/
4-
54
var mongodb = require('./db');
65
var connect=require('./connect');
76

7+
var async = require('async');
8+
89
function User(user){
910
this.name = user.name;
1011
this.password = user.password;
@@ -17,6 +18,7 @@ function User(user){
1718
}
1819

1920
module.exports = User;
21+
2022
User.prototype.save=function(callback){
2123
//callback 是执行玩保存后的回调函数
2224
var user = {
@@ -44,8 +46,8 @@ User.prototype.save=function(callback){
4446
//连接失败会将错误信息返回给回调函数,并且关闭数据库连接
4547
if(err){
4648
return callback(err);
47-
}
48-
//插入新的数据
49+
}
50+
//插入新的数据
4951
collection.insert(user,{safe: true},function(err,result){
5052
//如果错误err有错误信息,将err和user返回给回调函数
5153
callback(err, user);//成功!返回插入的用户信息
@@ -54,6 +56,7 @@ User.prototype.save=function(callback){
5456
};
5557
//读取用户信息
5658
User.get = function(name, callback){
59+
5760
//读取 users 集合
5861
global.db.collection('user', function(err, collection){
5962
if(err){
@@ -69,6 +72,31 @@ User.get = function(name, callback){
6972
}
7073
});
7174
});
75+
76+
// async.waterfall([
77+
// function(cb){
78+
// global.db.collection('user', function(err, collection){
79+
// cb(err, collection);
80+
// });
81+
// },
82+
// function(collection,cb){
83+
// //查找用户名 name 值为 name文档
84+
// collection.findOne({name: name},function(err, doc){
85+
// if(doc){
86+
// var user = new User(doc);
87+
// cb(err, user);//成功!返回查询的用户信息
88+
// } else {
89+
// cb(err, null);//失败!返回null
90+
// }
91+
// });
92+
// }
93+
// ], function (err, result) {
94+
// //var l;
95+
// callback(null, result);
96+
// // result now equals 'done'
97+
// });
98+
99+
72100
};
73101

74102
//点击股票关注,更新表
@@ -216,6 +244,7 @@ User.setInfo=function(name,info,callback){
216244

217245
//修改密码
218246
User.password=function(name,old,newP,callback){
247+
219248
//读取 users 集合
220249
global.db.collection('user', function(err, collection){
221250
if(err){
@@ -239,4 +268,6 @@ User.password=function(name,old,newP,callback){
239268
}
240269
});
241270
});
242-
};
271+
272+
};
273+

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"connect-mongo": "*",
1313
"connect-flash": "*",
1414
"socket.io": "*",
15-
"gm": "*"
15+
"gm": "*",
16+
"async":"*"
1617
},
1718
"devDependencies": {
1819
"grunt": "~0.4.2",

public/js/min/header.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)