tutorial nodebeginner node introduccion framework español caracteristicas javascript node.js asynchronous

javascript - nodebeginner - npm



La función de base de datos asíncrona de Nodejs necesita una respuesta sincrónica (1)

Soy nuevo en nodejs y estoy escribiendo un código que necesita consultar mi base de datos MySQL y devolver un nombre de usuario de un user_id determinado. He estado leyendo que todas tus funciones deberían ser asincrónicas. En este caso, idealmente me gustaría que el servidor pueda responder a otras solicitudes de eventos mientras se lleva a cabo esta consulta. Sin embargo, no es una consulta particularmente grande y solo devuelve un solo valor. Tal vez debería hacerlo sincrónico? (Si esa es su respuesta, el código de muestra para cambiar sería genial) De todos modos, aquí está mi función. Da un error cerca de la última línea "return current_username;" porque current_username no está definido en ese punto. ¿Alguna sugerencia?

function get_current_username(current_user_id) { console.log('' | Entered get_current_username''); sqlq = ''SELECT username FROM users WHERE id = '' + current_user_id; connection.query(sqlq, function(err, rows, fields) { if (err) throw err; var current_username = rows[0].username; console.log('' | the current_username ='' + current_username); }); return current_username;

}


Pase una función de devolución de llamada a get_current_username y luego llame a esa función de devolución de llamada desde el interior de la devolución de llamada de connect.query :

function get_current_username(current_user_id, callback) { console.log('' | Entered get_current_username''); sqlq = ''SELECT username FROM users WHERE id = '' + current_user_id; connection.query(sqlq, function(err, rows, fields) { if (err) throw err; var current_username = rows[0].username; console.log('' | the current_username ='' + current_username); callback(current_username); }); }

Cuando vaya a usar esta función, haría algo como:

get_current_username(12345, function(username) { console.log("I am " + username); });

También puede consultar el uso de promesas / futuros. Tengo la sensación de que no podré hacer una explicación de esta justicia, así que me conectaré con esta pregunta de sobre la comprensión de las Promesas .

Sin embargo, esta es una decisión arquitectónica: algunas personas preferirían usar devoluciones de llamada, especialmente si escriben un módulo destinado a ser reutilizado por terceros. (Y, de hecho, es probable que sea mejor tener tu cabeza completamente al tanto de las devoluciones de llamadas en las etapas de aprendizaje aquí, antes de adoptar algo como Promise).