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

368
Vistas
El orden de ejecución para la función de envío de VueJS está causando un problema

Estoy tratando de mostrar una lista de anuncios (recuperados de la API) en la página. Estoy usando la tienda Vuex y tengo un estado llamado anuncios . También quiero que esta lista se actualice cada vez que el usuario actualice/ingrese a la página. Así que usé ganchos de ciclo de vida, particularmente el montado(). Tengo una función de envío que toma una ID de club como parámetro. El problema es que trato de acceder a la matriz de anuncios en el componente Vue, está un "paso" detrás de la versión en la tienda Vuex.

Lo siguiente está en el componente Vue ClubDetails.vue

 name: "ClubDetails", data(){ console.log("inside data") return { club_id: this.$route.params.clubID, announcements: this.$store.state.ClubDetails.announcements } }, mounted() { this.$store.dispatch('ClubDetails/getAnnouncements', this.club_id) console.log("After dispatch function") },

Esta es mi tienda ClubDetails.js

 namespaced: true, state: { announcements: [], }, mutations: { setAnnouncements(state, newArr) { state.announcements = newArr console.log("Inside Mutation") }, }, actions: { async getAnnouncements({ commit, state }, club) { const params = new URLSearchParams([ ['clubId', club] ]); await axios.get("http://127.0.0.1:8000/api/announcements", { params }).then(res => { console.log("inside dispatch function") commit('setAnnouncements', res.data) }).catch(err => { console.log(err) }) }, }, getters: { getAllAnnouncements(state) { return state.announcements; } }, };

Después de las declaraciones de impresión, el orden de ejecución no es el que esperaba

Esperaba que el orden fuera así: datos internos -> despacho interno -> mutación interna -> después del despacho.

Otro problema es que cuando actualizo la página, esperaba que se llamara de nuevo amount() y que la matriz se actualizara y mostrara nuevamente, pero al actualizar todo el contenido de la matriz desaparece

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Esto se debe a que this.$store.dispatch('ClubDetails/getAnnouncements', this.club_id) está respondiendo a un servidor y es asíncrono y toma tiempo para que los anuncios se obtengan del servidor. Mientras que console.log("After dispatch function") se ejecuta antes de que se reciba una respuesta del servidor.

Es por eso que ve la función Después del envío primero y la función de envío interno después.

Intente poner await antes del envío de esta manera.

 async mounted() { await this.$store.dispatch('ClubDetails/getAnnouncements', this.club_id) console.log("After dispatch function") },

Debe devolver el método axios.get ya que es una Promesa y no es necesario usar await y luego juntos. También puede eliminar el async de getAnnouncements ya que ya no usa await.

 getAnnouncements({ commit, state }, club) { const params = new URLSearchParams([ ['clubId', club] ]); return axios.get("http://127.0.0.1:8000/api/announcements", { params }).then(res => { console.log("inside dispatch function") commit('setAnnouncements', res.data) }).catch(err => { console.log(err) }) },
over 4 years ago · Santiago Trujillo 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