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);
});
3 回复
- emailFind 中的
return Promise
可以抽出来放到底部 - createSimpleUser 如果是自己写的话,应该重构成基于 promise,现在是 callback 和 promise 混在一起
- emailFind 的话应该走 reject 流程
@klamtlne 重构成基于promise就是在mongoose里面直接返回个promise吗?
@1043099804 没用过 mongoose… 如果可以 UserProfileModel.createSimpleUser(params).then(func)
那是极好的