2013-03-30 3 views
0

Я пытаюсь определить, работает ли рекурсия в моем случае использования ниже.Найти уникальное имя пользователя с рекурсией

Я передал в 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, но ищет возможные лучшие способы.

+3

Вам просто нужно 'while' цикл. – Pointy

+0

Также вы уверены, что 'Users.find()' является синхронным методом? (Может быть, но термин «запрос к БД» заставляет меня задаться вопросом ...) – Pointy

+0

Это должен быть код на стороне сервера, который проверяет правильное имя пользователя или предоставляет подходящую альтернативу. Не какой-то клиентский скрипт. –

ответ

0

Через некоторое время решение вашей функции

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; 
} 
Смежные вопросы