Node中Promise库Q的使用
研究了半天,发现直接自己写返回最好用。
var Q = require('q');
//用Q整合的函数都是调用mongoose的,返回查询表的结果或者创建新表
var findUserByNickname = Q.nfbind(UserProfileModel.findUserByNickname.bind(UserProfileModel));
//Q.nfbind 和Q.denodeify是一个东西,同名而已。
//使用 Q.defer()自定义合法返回的内容,注意要在回调函数外使用return deferred.promise的语法
var nameFind = function(exist){
var deferred = Q.defer();
if (exist) {
message = "用户名重复";
deferred.resolve(1);
return deferred.promise;
}else{
UserProfileModel.findUserByEmail(email,function(err,user){
if (user) {
deferred.resolve(1);
message = "邮箱重复";
}else {
deferred.resolve(0);
};
});
return deferred.promise;
};
}
var emailFind = function(exist){
var deferred = Q.defer();
if (exist==0){
UserProfileModel.createSimpleUser(user_nickname,user_realname,email,password,userid,function(err,user){
deferred.resolve(user);
message = "注册成功";
});
return deferred.promise;
}else{
deferred.resolve(1);
return deferred.promise;
}
}
//最后直接调用函数的实例,function error自动收集error。
findUserByNickname(user_nickname)
.then(nameFind)
.then(emailFind)
.then(
function(data){
res.send(message);
},function(error){
res.sendError("注册失败");
console.log(error);
});