Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

356
Vistas
javascript - esperar no esperar

Estoy usando Knex para hacer una consulta de selección simple de la base de datos. Devolví un valor en la función y agregué esperar antes de la llamada asíncrona. Pero await no espera y siempre sigue ejecutando la siguiente línea con un valor indefinido.

Este es el archivo de modelo de usuario con console.log para el resultado de la consulta, esto siempre se imprime en último lugar:

 import knex from '../db/db.config.js'; const User = {}; User.findByNameAndPassword = (username, password) => { knex('user') .where({ name: username }) .where({ password: password }) .then(rows => { console.log(rows); return rows; }) .catch((error) => { console.log(error); }) } export default User;

y este es el controlador, el archivo console.log aquí siempre se imprime primero:

 import User from '../models/user.js'; export const login = async (req, res) => { let name = req.body.name; let password = req.body.password; let user = await User.findByNameAndPassword(name, password) console.log('user', user); }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Para que await funcione, debe usarlo en una función que devuelva una promesa, o una promesa en sí misma.

Para hacerlo en este caso, coloque return antes knex('user') en su función User.findByNameAndPassword .

over 4 years ago · Santiago Trujillo Denunciar

0

Bueno, según el código compartido por usted, parece que findByNameAndPassword es una función síncrona. Entonces, esperar no ayudará en el controlador. Es posible que desee actualizar su findByNameAndPassword a uno asíncrono. Como esto

 import knex from '../db/db.config.js'; const User = {}; User.findByNameAndPassword = async (username, password) => { try { const rows = knex('user') .where({ name: username }) .where({ password: password }); console.log(rows); return rows; catch(err) { console.log(err); } } export default User;

Deberias hacer eso. Lo que estamos haciendo en este código es intentar obtener las rows en el bloque de prueba. Y si FALLA, el bloque catch registrará un error y registrará el error por nosotros.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda