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)。