Promise & callback hell

#问题 这几天的工作就是做一个网站注册登陆的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);
    });
}

转载于:https://my.oschina.net/u/3134186/blog/804802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值