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

145
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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