Node中Promise库Q的使用 - CNode技术社区

Node中Promise库Q的使用
发布于 10 年前 作者 1043099804 12307 次浏览 最后一次编辑是 9 年前 来自 分享

研究了半天,发现直接自己写返回最好用。

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) 那是极好的

回到顶部

AltStyle によって変換されたページ (->オリジナル) /