试着想出一种结构化的逻辑方法。为简单起见,我正在使用Node.js,Redis和Express.js创建用户注册页面。
用户将详细信息发布到页面。
确认用户名有效,然后Redis检查用户名是唯一的。如果是,我们继续,如果不是,我们将返回错误消息和所有先前的详细信息。
确认密码有效。如果不是,则返回错误,我们不会继续。
确认电子邮件与Redis是唯一的。如果是我们继续,如果不是,我们将返回错误消息并停止。
如果此时没有错误,则将数据插入Redis。
这看起来很简单,但是使用回调已经产生了一团糟 - 特别是当它返回错误时。
如何以整洁的方式构建它?
答案 0 :(得分:1)
你所经历的是回调地狱。您可以执行各种操作,例如命名回调函数而不是内联它们,遵循相同的模式等...
但是,我建议您查看the async module。
在你非常典型的情况下,我会使用async.series:
var validateUserName = function(username, callback){
if(username!='valid'){
return callback('invalid username');
}
};
var checkRedis = function(username, callback){
// check to redis
};
var checkPassword = function(password, callback){
// if password valid callback();
// else callback('invalid password');
}
etc...
async.series([checkUserName, checkRedis, checkPassword, etc...], next);