Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

87
Visualizações
Express no espera la función MongoJS

Configuré una función para que mi punto final Express JS 'espere' para obtener un resultado de Mongo DB usando Mongo JS.

Función:-

 async function getIntroducer(company){ const intro = await dbIntro.collection('introducers').findOne({company: company}, function(err, doc) { console.log("🚀 ~ file: app.js ~ line 289 ~ intro ~ doc.introducer", doc.introducer) return doc.introducer }); return intro //return intro; };

Expresar punto final JS: -

 app.post( "/case", passport.authenticate("accessToken", { session: false }), async function (req, res) { const body = req?.body; const intro = await getIntroducer(req.user.company); console.log("🚀 ~ file: app.js ~ line 1152 ~ intro", intro)

Comportamiento actual, :-

 🚀 ~ file: app.js ~ line 1152 ~ intro undefined

Luego se envía el resultado, luego obtengo esto en la consola (es decir, no está esperando): -

 🚀 ~ file: app.js ~ line 289 ~ intro ~ doc.introducer 347501

También intenté deshacerme por completo de 'const intro' y simplemente devolverlo. Y también intenté deshacerme de la función de devolución de llamada, pero MongoJS dice 'CB no es una función'

¿Alguna ayuda por favor?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Está mezclando diferentes estilos de implementaciones asincrónicas (devolución de llamada y promesa) al consultar la colección.

Al ver que la biblioteca mongojs solo admite el estilo de devolución de llamada. Debe prometer la operación findOne para esperarla.

Existe la biblioteca promisify en el módulo util que puede ayudar en este objetivo en la medida en que la firma de devolución de llamada es una función que se llama con un error y/o un resultado.

Por ejemplo, para prometer el findOne para que pueda esperarse, puede escribir

 const util = require('util'); async function getIntroducer(company){ const findOneDbIntro = util.promisify(dbIntro.collection('introducers').findOne); let intro; try { intro = await findOneDbIntro({company: company}); } catch (err) { // log error with your logging library. } //... }

Esto da un resultado similar a hacerlo a mano. El objeto Promise está bien documentado en MDN :

 async function getIntroducer(company){ let intro; try { intro = await new Promise( (resolve, reject) => { dbIntro.collection('introducers').findOne({company: company}, function (err, doc) { if(err) { reject(err); } resolve(doc); }); }); } catch (err) { // log error with your logging library. } //... }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda