Promise & callback hell
Promise & callback hell
KatharinaL 发表于10个月前
Promise & callback hell
  • 发表于 10个月前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: nodejs 利用promise解决异步调用

#问题 这几天的工作就是做一个网站注册登陆的Assignment,整个结构框架都很清晰,然后在推进的过程中还是发现异步调用存在问题,刚刚学习nodejs不久就体会到了callback hell的可怕,但是这个问题又是不能不去解决的。所以还是老老实实解决吧。从promise到generator再到async await,个人感觉其实还是async await最好用,但是不知道为什么实现不了,可能是版本的问题,但是好像还涉及编译什么的,最后还是用不上。然后没有选择用generator的原因是感觉我面对的这个问题可能用promise写起来更顺手一些,所以就还是选择了promise,不同情况下应该用不同的解决方案。

#遇到的小case 我要在数据库中查询当前的输入的用户信息在数据库中是否存在,然后要把错误信息传给controller层。然后因为查询信息肯定是异步的,我要返回数据肯定要等所有的都查询完再返回,一开始没有考虑到,所以永远都是没有重复的。后来发现这个问题以后,面对mongoose的count()方法怎么写异步又不知道怎么写,最后还是看了N多资料慢慢摸索出来的,所以迁移能力还是很重要的啊。

#然后先贴一下代码吧

function CheckRepeat(users) {
    function fun1(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({name:users.name},function(err,res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" name_repeat"));
    			}
    		});
    	});
    }
    function fun2(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({studentNumber:users.studentNumber},function(err,res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" studentNumber_repeat"));
    			}
    		});
    	});
    }
    function fun3(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({phoneNumber:users.phone},function(err, res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" phoneNumber_repeat"));
    			}
    		});
        });
    }
    function fun4(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({email:users.emails},function(err,res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" email_repeat"));
    			}
    		});
    		
    	});
    }
    Promise.resolve("").then(fun1).then(fun2).then(fun3).then(fun4).done(function(info) {
    	controller.isSucceed(info,users);
    });
}
标签: promise mongoose
共有 人打赏支持
粉丝 0
博文 2
码字总数 1039
×
KatharinaL
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: