Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

358
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!