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

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

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 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!