2013-03-30 41 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

A,而解決您的功能

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; 
}