Estoy tratando de implementar un proceso de back-end de registro donde la identificación del usuario se crea aleatoriamente. El proceso comprueba si existe el correo electrónico del usuario. Si no, crea una identificación aleatoria de 24 caracteres. Después de esto, verifica si esta identificación ya existe en otro usuario. Si no, debería crear el usuario en la base de datos (mysql).
Las funciones para crear el id y consultarlo en la base de datos son:
const makeId = (length) => { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; }; getUserByID = (id, callback) => { db.query(`SELECT userID FROM users WHERE userID=?`, [id], (err, results) => { if (err) { return callback(err, null); }, return callback(null, results); }); };Así que llamé a las funciones de esta manera:
let found = true; while (found === true) { let userID = makeId(24); getUserByID(userID, (error, result) => { if (error) { return res.status(500).json({ errors: 'Database connection error' }); } if (!result.length) { found = false; } }); }Por alguna razón que no entiendo, de esta manera está dando un bucle infinito. Traté de registrar cada uno de los pasos, incluso dentro de getUserByID y creo que no completa esta función. Supongo que es porque la consulta no está esperando la identificación (o viceversa). También probé un método try catch, el método .then().catch(){}, async await en las funciones y async fuera del ciclo while, pero por alguna razón no funcionaron. ¿Alguna idea de lo que puede estar mal? Gracias.