Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda