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

235
Visualizações
La función asíncrona de Javascript arroja un error al usar await

Todavía soy un principiante cuando se trata de JavaScript. En mi aplicación vuejs3 tengo la siguiente situación (supongo que saber que esto es Vue no es importante):

En mi aplicación Vue tengo un método como este

 async LoadBasicData() { this.basicData = await window.LoadBasicData(); },

Llama a una función en un archivo JavaScript diferente. El método se parece un poco a esto:

 async function LoadBasicData() { return new Promise(resolve => { let result = Object.create(null); let url = 'MyFancyUrl'; axios .get(url) .then((response) => { result.data = response.data; result = await LoadBuildId(result); resolve(result); }) }); }

La función LoadBuildId se ve muy similar

 async function LoadBuildId(result) { return new Promise(resolve => { let url = 'MySecondFancyUrl'; axios .get(url) .then((response) => { result.buildId = response.data; resolve(result); }) }); }

Desde mi comprensión de todo esto async/await/promise, esta debería ser la forma correcta de hacerlo, pero teniendo en cuenta que no funciona, estoy bastante seguro de que hay algo que no entendí bien. Recibo el error "await solo es válido en funciones asíncronas y los cuerpos de nivel superior de los módulos" al llamar a LoadBuildId. No entiendo el error, ya que se llama await en una función asíncrona

¿Qué estoy haciendo mal aquí? ¿Por qué mi función asíncrona no puede llamar a otra función asíncrona? ¿O hay un mejor camino?

Sé que hay al menos una forma de lograr lo que necesito, es mediante el uso de devoluciones de llamada. Lo he estado usando hasta ahora, pero no soy realmente un fanático de él, ya que realmente hace que el código sea innecesariamente complicado.

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

0

estas cometiendo 2 errores

  • Envolviendo la funcionalidad existente relacionada con la promesa con su propia promesa (consulte: ¿Qué es el antipatrón de construcción de promesa explícita y cómo lo evito? )
  • Mezclando async/await con then

El código se puede simplificar enormemente:

 async function LoadBuildId(result) { let url = 'MySecondFancyUrl'; const response = await axios.get(url) result.buildId = response.data; return result; }

y

 async function LoadBasicData() { let url = 'MyFancyUrl'; let result = Object.create(null); const response = await axios.get(url); result = await LoadBuildId(result); return result; }

Para ser honesto, se puede simplificar aún más: no es necesario construir objetos de result solo para establecer propiedades en él; también puede devolver los resultados de una llamada a axios.get

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