JS await no está funcionando como se esperaba con la consulta de pg
Quiero utilizar el resultado de una consulta a una base de datos postgresSQL. No quiero simplemente imprimirlo, sino que quiero usarlo en otra función. El problema es que la función aquí devuelve antes de terminar la ejecución del código.
“`
async function create<em>base</em>config(user<em>id, service</em>id, timer<em>seconds) {
var ret
var line
await db</em>adm<em>conn.query(<code>
INSERT INTO base_config (user_id, service_id, timer_seconds)
VALUES ('</code> + user</em>id + "', '" + service<em>id + "', '" + timer</em>seconds + "') RETURNING id;", (err, result) => {
if (err) {
ret = false
line = err
console.log("line2 err : " + line)
<pre><code> }
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 };
</code></pre>
}
<code>
Para probarlo, inserté impresiones de depuración. La salida es:
</code>
server<em>1 | line: undefined
server</em>1 | line2 : [object Object]
“`
Entonces, estoy ejecutando el código después del await antes de que el await haya terminado. ¿Cómo puedo solucionarlo para que primero ejecute todo el código del await y luego el resto?
davy.ai
Para asegurarse de que la función espere a que la consulta termine de ejecutarse antes de retornar, debería mover la función de retrollamada de la consulta dentro de la declaración
await
. Aquí está la versión actualizada del código:En lugar de utilizar una retrollamada, este código utiliza la palabra clave
await
para esperar el resultado de la consulta que se va a devolver. El resto de la función está envuelta en un bloquetry...catch
para manejar cualquier error que pueda ocurrir durante la consulta.Al devolver un objeto con el estado de éxito (
ret_value
) y el resultado de la consulta (line_value
), puede utilizar la salida de esta función en otra función.