Estoy escribiendo un código en JS que requiere el uso de la función asíncrona ya que he realizado algunas búsquedas aquí y parece que asíncrono es el camino a seguir para JS. Estoy escribiendo un pequeño script para que el nodo active una búsqueda cada vez que se pasa una variable a través de la función. Si la variable está en la base de datos, debería regresar como la variable; de lo contrario, la variable permanecería sin establecer. Siento que mi comprensión de las devoluciones de llamada y la sincronización es deficiente. ¿Alguien podría indicarme la dirección correcta en cuanto a lo que podría estar haciendo mal?
var mysql = require('mysql'); const util = require('util'); var connection; const dbConfig = { host : 'localhost', user : 'uname', password : 'password', database : 'users' }; async function check_name(check_fname) { let connection; try { connection = await mysql.createConnection(dbConfig); const result = await connection.query('SELECT fname from users WHERE fname LIKE ' + mysql.escape(check_fname), function (error, results, fields) { if(results.length > 0){ return await check_fname; } } for (const element of names) { const fname = check_name(element); } console.log(fname); <--- Shows Undefinedconst express = require('express'); const app = express(); const mysql = require('mysql2'); // async/await works only in mysql2, also you need to use mysql2 as dependency (npm i mysql2) app.use(express.json()) mysql.createConnection({ host : 'localhost', user : 'uname', password : 'password', database : 'users' }); //keeps always connected to the db app.get('/user/:name', async (req, res) => { const name = req.params.name; const user = await mysql.query(`select fname from users where fname = ${name}`); console.log(user); }); app.listen(3000, () => console.log('Server started listening on port 3000');Mis recomendaciones:
Utilizar este-
return check_fname;en vez de
return await check_fname;Además, cambie su iteración anterior algo como esto:
let names = [] let fname = []; for (let element of names) { fname.push(check_name(element)); } console.log(fname)espero que funcione
Estás definiendo fname dentro del alcance del ciclo, luego lo referencias fuera de su alcance, dejándolo indefinido. Intenta poner el console.log(fname); dentro del bucle for.
Además de eso, no estás esperando tu función check_name.