Javascript 使用递归查找唯一用户名
我试图确定递归在下面的用例中是否工作良好 我作为一个参数传入Javascript 使用递归查找唯一用户名,javascript,recursion,Javascript,Recursion,我试图确定递归在下面的用例中是否工作良好 我作为一个参数传入firstName,并为我的用户生成一个唯一的用户名 getUniqueUsername: function(firstName) { if (!firstName) { var randomNum = Math.floor(Math.random() * 9000) + 1000; var username = firstName.substring(0, 4) + randomNum;
firstName
,并为我的用户生成一个唯一的用户名
getUniqueUsername: function(firstName) {
if (!firstName) {
var randomNum = Math.floor(Math.random() * 9000) + 1000;
var username = firstName.substring(0, 4) + randomNum;
// check if username is already used - using recursion evaluate for performance
var user = Users.find({username: username}, {"_id": 1});
if (user) {
//call recursion method here
}
return username
} else {
return "";
}
}
是否有更好的方法来不断生成和查询数据库,直到找到唯一的用户名。当
user
返回true时,我想到了对相同方法的递归调用,但正在寻找可能更好的方法。函数的一个while解决方案
getUniqueUsername: function(firstName) {
if(!firstName) return "";
do {
var randomNum = Math.floor(Math.random() * 9000) + 1000;
var username = firstName.substring(0, 4) + randomNum;
var user = Users.find({username: username}, {"_id": 1});
} while(user);
return username;
}
您只需要一个
while
循环。另外-您确定Users.find()
是一个同步方法吗?(可能是这样,但术语“查询数据库”让我想知道……)应该是服务器端代码来检查有效的用户名,或者提供合适的替代方案。不是一些客户端脚本。所以你要在注册过程中向客户端代码公开每个用户名吗?@MikeRobinson正如Ondrej提到的,这是在服务器端代码中(我使用meteor.js)。