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

170
Vistas
Uso de funciones asíncronas como condiciones

Digamos que quiero ejecutar una declaración if donde la condición es una función asíncrona.

 const con = require('./con'); if(con.con('email@gmail.com') console.log('User exists!') else { console.log('user does not exist?') }

Esta es la función, utiliza mongoose findOne, que es una tarea asíncrona.

 const User = require ('../nodeDB/models/user.js'); const con = function (email) { User.findOne( { userEmail: email }, function (err, doc) { if(err) { console.log(err); } if (doc) { return false; } else { return true; } }); } module.exports.con = con;

El problema es que se llama a la declaración if antes de que se pueda ejecutar la estafa, lo que no establece la condición.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En primer lugar, su función con() no devuelve nada. Deberá return User.findOne(....)

Su declaración if debe respetar el hecho de que la tarea asíncrona debe completarse primero.

 con.con('email@gmail.com') .then((exists) => { if (exists) console.log('User exists!') else { console.log('user does not exist?') } })

O con aynsc / await :

 async function checkIfUserExists() { if (await con.con('email@gmail.com') console.log('User exists!') else { console.log('user does not exist?') } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Use await o ponga su lógica y then bloquee.

 // must be in async declared function if (await foo()) { } else { } // or foo().then(res=>{ if (res) { } else { } })
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes hacerlo de esta manera:

 const con = userEmail => User.findOne({userEmail}).lean().exec(); (async () => { if (await con('email@gmail.com')) { console.log('User exists!') } else { console.log('user does not exist?') } })()
  1. Devuelve User.findOne desde tu función.

(opcional) 2. .lean() (devuelve JSON simple, más rápido)

(opcional) 3. Añádelo .exec() para que devuelva una Promesa verdadera y no solo una opción entonces.

  1. ahora puede simplemente await con() en cualquier lugar dentro de una función async , como si fuera síncrona.
about 4 years ago · Juan Pablo Isaza 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