Как создать уникальное имя пользователя, проверяя снова и снова в базе данных? - PullRequest
0 голосов
/ 05 апреля 2020

Я пишу функцию для генерации уникального имени пользователя для каждого нового пользователя. Сначала назначьте имя пользователя, совпадающее с полным именем пользователя, затем проверьте, существует ли оно в вашей базе данных или нет. Если он существует, добавьте к нему какое-то число, а затем проверяйте снова, пока не найдете новое имя пользователя, которого нет в базе данных.

Ниже приведен код для того же

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

Это не дает мне желаемого результата. L oop работает бесконечно. Куда я делаю не так?

1 Ответ

0 голосов
/ 05 апреля 2020

Итак, после предложения 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);
                });
            }

Необходимо дождаться функции l oop, пока база данных не вернет обещание. Используя asyn c, ожидайте этого. Вы можете обратиться к этому ответу для более подробной информации JavaScript ES6 обещание для l oop

...