es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo ejecutar un código solo después de que se haya completado la promesa?

Todo funciona en mi código, el problema es que this.loading=false se ejecuta antes de que el bucle for() termine de enviar todas las solicitudes.

¿Cómo puedo hacer que this.loading=false se ejecute solo después de que el for() termine de enviar todas las solicitudes? Espero que entiendas la idea.

métodos:{
    fileChange(event){
        this.loading=true
        //código
        for(var i=0; i < tasks.length; i++){
            //código
            axios.post('/api/operation', datos)
                .then(respuesta=>{
                    this.operations.push({nombre: respuesta.data.nombre});
                })

<pre><code>    }

    //¡Quiero que el siguiente código se ejecute después de que for() haya terminado!
    this.loading=false
},
</code></pre>

},
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una manera de resolver este problema es utilizando Promise.all() para esperar a que todas las promesas se resuelvan antes de ejecutar this.loading=false. Esto se puede lograr de la siguiente manera:

    methods:{
        fileChange(event){
            this.loading=true
            //código
            let requests = [] //array para almacenar promesas
            for(var i=0; i < tasks.length; i++){
                //código
                let promise = axios.post('/api/operation', data)
                    .then(response=>{
                        this.operations.push({name:response.data.name});
                    })
                requests.push(promise); //agregar cada promesa al array requests
            }
    
            Promise.all(requests) //esperar a que todas las promesas se resuelvan
                .then(()=>{
                    this.loading=false //ejecutar esto después de que se hayan enviado todas las solicitudes
                })
    
        },
    
    },
    

    En este código, creamos un array requests para almacenar las promesas devueltas por cada solicitud axios.post(). Luego, utilizamos Promise.all() para esperar a que todas las promesas en requests se resuelvan. Una vez que todas las promesas se resuelvan, se llama a la función .then() y se ejecuta this.loading=false, asegurando que se ejecute solo después de que se hayan enviado todas las solicitudes.

Comments are closed.