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

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

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