Quiero usar el retorno de una consulta a una base de datos postgresSQL. No quiero simplemente imprimirlo. Quiero usarlo en otra función. El problema es que la función aquí regresa antes de que termine de ejecutar el código.
async function create_base_config(user_id, service_id, timer_seconds) { var ret var line await db_adm_conn.query(` INSERT INTO base_config (user_id, service_id, timer_seconds) VALUES ('` + user_id + "', '" + service_id + "', '" + timer_seconds + "') RETURNING id;", (err, result) => { if (err) { ret = false line = err console.log("line2 err : " + line) } else { ret = true line = result.rows console.log("line2 : " + line) // json_return = JSON.parse(result) // console.log(result.rows) } }); console.log("line: " + line) return { ret_value: ret, line_value: line }; }Para probarlo, inserté impresiones de depuración. La salida es:
server_1 | line: undefined server_1 | line2 : [object Object]así que estoy ejecutando el código después de la espera antes de que finalice la espera. ¿Cómo puedo arreglar eso, para que primero ejecute todo el código del await y luego el resto?
no debe usar una función de devolución de llamada como la función de flecha. Deberías usar try catch así:
async function create_base_config(user_id, service_id, timer_seconds) { var ret var line try { line = await db_adm_conn.query(` INSERT INTO base_config (user_id, service_id, timer_seconds) VALUES ('` + user_id + "', '" + service_id + "', '" + timer_seconds + "') RETURNING id;") ret = true } catch (err) { ret = false line = err } return { ret_value: ret, line_value: line }; }