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