如何通过在数据库中反复检查来生成唯一的用户名?
How to generate unique username by checking again and again in database?
我正在编写一个函数来为每个新用户生成唯一的用户名。首先,分配一个与用户全名匹配的用户名,然后检查它是否存在于您的数据库中。如果它存在,则向其添加一些数字,然后再次检查,直到你想出一个数据库中不存在的新用户名。
下面是相同的代码
var generateUsername = function(name){
var username = name;
console.log(username);
var isUsername;
var number = 0;
db.collection("users").where("username", "==", username)
.get()
.then(function(querySnapshot) {
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
while(isUsername == true){
number++;
username = fullName + number;
console.log(username);
db.collection("users").where("username", "==", username)
.get()
.then(function(querySnapshot) {
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
这没有给我想要的输出。循环是 运行 无限。我哪里做错了?
所以在andy mccullough
建议之后,我想出了以下解决方案
var generateUsername = function(name){
var username = name;
var isUsername;
var number = 0;
db.collection("users").where("username", "==", username).get()
.then(function(querySnapshot) {
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
(async function loop(){
while(isUsername == true){
number++;
username = name + number;
var querySnapshot = await db.collection("users").where("username", "==", username).get();
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
}
console.log(username);
})();
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
有必要等待循环函数直到数据库returns 一个承诺。使用 async await 可以实现这一点。
您可以参考此答案了解更多详情
我正在编写一个函数来为每个新用户生成唯一的用户名。首先,分配一个与用户全名匹配的用户名,然后检查它是否存在于您的数据库中。如果它存在,则向其添加一些数字,然后再次检查,直到你想出一个数据库中不存在的新用户名。
下面是相同的代码
var generateUsername = function(name){
var username = name;
console.log(username);
var isUsername;
var number = 0;
db.collection("users").where("username", "==", username)
.get()
.then(function(querySnapshot) {
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
while(isUsername == true){
number++;
username = fullName + number;
console.log(username);
db.collection("users").where("username", "==", username)
.get()
.then(function(querySnapshot) {
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
这没有给我想要的输出。循环是 运行 无限。我哪里做错了?
所以在andy mccullough
建议之后,我想出了以下解决方案
var generateUsername = function(name){
var username = name;
var isUsername;
var number = 0;
db.collection("users").where("username", "==", username).get()
.then(function(querySnapshot) {
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
(async function loop(){
while(isUsername == true){
number++;
username = name + number;
var querySnapshot = await db.collection("users").where("username", "==", username).get();
if(querySnapshot.empty){
isUsername = false;
}
else {
isUsername = true;
}
}
console.log(username);
})();
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
有必要等待循环函数直到数据库returns 一个承诺。使用 async await 可以实现这一点。
您可以参考此答案了解更多详情