Tengo una API que solicita una consulta en PostgreSQL, así que tengo esto:
const getPresupuestos = () => { return new Promise(function(resolve, reject) { pool.query('SELECT * FROM presupuestos ORDER BY id ASC;', (error, results) => { if (error) { reject(error) } resolve(results.rows); }) }) }Y luego en el índice tiene esto:
app.get('/', (req, res) => { bd.getPresupuestos() .then(response => { res.status(200).send(response); }) .catch(error => { res.status(500).send(error); }) })El problema es que tengo una aplicación de reacción desde la que intento obtener el valor de la consulta como una cadena con este código:
const [presupuestos, setPresupuestos] = useState(false); useEffect(() => { getPresupuestos(); console.log(presupuestos) //return in console }, []); function getPresupuestos() { fetch('http://localhost:3001') .then(response => { return response.text(); }) .then(data => { setPresupuestos(data); //value wanted }); } Y la primera vez que ejecuto esto, el console.log devuelve la consulta que quiero, pero si actualizo la página, obtengo un false del mismo console.log .
Soy bastante nuevo en React, por lo que estaría agradecido si alguien pudiera decirme por qué sucede esto y cómo obtener el valor que necesito.
Como su función getPresupuestos está actualizando el estado después de resolver la promesa, lo que puede llevar algún tiempo y no podrá obtener su valor inmediatamente después. Lo que podría hacer es registrar los datos en then resuelva.