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

139
Views
Cómo esperar una promesa dentro de una solicitud de obtención de base de fuego

Estoy tratando de obtener la variable del propietario y, dado que la función generalmente la devuelve como indefinida, decidí usar async/await pero no puedo usar await dentro de otra función y puedo acceder a la variable fuera de ella. ¿Hay una solución fácil o tengo que volver a trabajar en la función?

 async getOwner() { database.collection("users").doc(this.owner).get().then(data => { var owner = new Promise(function (resolve, reject) { resolve(new User(data.data().username, "", data.data().email, [], data.data().info)) }) let result = await owner return result }) }

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Si usa async/await, casi nunca es necesario usar then() o new Promise() . Puede escribir simplemente esto, esperando la promesa devuelta por get() :

 async function getOwner() { const snapshot = await database.collection("users").doc(this.owner).get() const data = snapshot.data() return new User(data.username, data.email, [], data.info) }

Probablemente también debería escribir código para comprobar si había datos en la instantánea y decidir qué hacer si el documento no se encuentra como se ve en la documentación .

Es posible que desee revisar cómo funciona async/await para usarlo de manera efectiva.

https://javascript.info/async-await

about 4 years ago · Juan Pablo Isaza Report

0

Si bien la respuesta de Doug es la mejor solución (de ahí mi voto a favor), quería señalar por qué su enfoque actual no funciona, que es porque no está devolviendo nada del código de nivel superior.

Entonces, si no desea usar await , lo más cercano para que su código actual funcione sería:

 function getOwner() { // 👇 Add return here return database.collection("users").doc(this.owner).get().then(data => { var owner = new Promise(function (resolve, reject) { resolve(new User(data.data().username, "", data.data().email, [], data.data().info)) }) let result = await owner return result }) }

Y la versión más sencilla, eliminando el código extra:

 function getOwner() { return database.collection("users").doc(this.owner).get().then(doc => { return new User(doc.data().username, "", doc.data().email, [], doc.data().info) }) }

Se necesita el return de nivel superior, porque permite que el retorno anidado se "burbujee" y regrese al código que llama a getOwner .

about 4 years ago · Juan Pablo Isaza 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!