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

252
Visualizações
¿Cómo devolver una variable 'esperar' en JavaScript?

Tengo el siguiente código JS

 async function readAtlasAll() { return await MongoClient.connect(url, async function(err, db) { var dbo = db.db("Users"); c = dbo.collection("List"); r = await c.find({}).toArray(); console.log(r); return r; }); } console.log(readAtlasAll());

No estoy seguro de por qué, pero la impresión del resultado de readAtlasAll() viene antes de imprimir la variable r dentro de la función, aunque estoy esperando el resultado de r de antemano. El terminal imprime Promise { <pending> } primero y luego imprime el contenido de r. Soy relativamente nuevo en JavaScript, por lo que realmente agradecería la ayuda. ¡Gracias!

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No puede usar await y una simple devolución de llamada en las llamadas a la API de MongoDB, ya que await no hará nada útil. Usa uno u otro, no ambos. Esto se debe a que las API asíncronas de MongoDB devolverán una promesa si NO les pasa una devolución de llamada y luego puede await esa promesa, pero si pasa una devolución de llamada, no devolverán una promesa, por lo tanto, la await no hace nada útil en absoluto. . Así es como lo implementaría omitiendo la devolución de llamada y usando await :

 async function readAtlasAll() { const db = await MongoClient.connect(url); const dbo = db.db("Users"); const c = dbo.collection("List"); const r = await c.find({}).toArray(); return r; // this will be the resolved value of the returned promise } readAtlasAll().then(r => { console.log(r); }).catch(err => { console.log(err); });

Tenga en cuenta que await no tiene ningún poder mágico. TODO lo que hace es suspender la ejecución de la función hasta que se resuelva/rechace una promesa. Por lo tanto, solo hace algo útil cuando await una promesa.

Y, además, TODAS las funciones async devuelven una promesa, por lo que NO hay forma de devolver un valor recuperado de forma asíncrona directamente desde su función. Debe utilizar un mecanismo asíncrono para comunicar un valor recuperado de forma asíncrona, como una promesa, una devolución de llamada o un evento. Entonces readAtlasAll() nunca puede devolver su valor directamente.

Consulte Cómo devolver la respuesta de una llamada asincrónica para obtener más información al respecto.

about 4 years ago · Santiago Trujillo 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