Soy nuevo en reaccionar y estoy atascado en esto. Estoy llamando funciones en una función como esta:
submit = () => { this.props.getValue(); this.props.resetValidation(); this.notify(); this.props.toggle(); this.props.disable(); this.props.actionCost(); //this.props.action(); // this.props.actionTable(); };Lo que sucede es que todas las funciones se ejecutan simultáneamente sin que una función se ejecute por completo. ¿Por qué sucede esto si no se debe llamar a una función solo después de que la primera función se ejecute correctamente?
Además, ¿cómo ejecuto las funciones una tras otra después de que una función se haya ejecutado por completo?
Por favor ayuda
La única forma de detener el flujo de ejecución es mediante el uso de async/await generoator o una función de generador, e incluso estos son solo "azúcar sintáctico" además de Promise .
Probablemente esté llamando a una función asíncrona y esperando que se "complete" sin usar await .
Otra situación es llamar a una función que internamente usa llamadas asincrónicas (como axios o fetch ) y responde con devoluciones de llamada. En esta situación, la ejecución continúa y la devolución de llamada se llamará más tarde, por eso los llamamos "devolución de llamada".
Por ejemplo:
console.log('before'); setTimeout(() => console.log('timer completed'), 1000); console.log('after');Resultará en:
before after timer completed En este ejemplo, estoy iniciando sesión before , luego establezco un tiempo de espera en el que proporciono una devolución de llamada (una función simple) que se ejecutará más tarde (1 segundo), mientras tanto, el flujo de ejecución continúa y se registra after . una vez que el temporizador llegó, el sistema ejecutará mi devolución de llamada.
En caso de que desee ejecutar el after después de que se timer completed , deberá proporcionar una devolución de llamada que se llamará después de que finalice la ejecución.
como esto:
function logTimer(doAfter) { setTimeout(() => { console.log('timer completed'); doAfter(); }, 1000); } console.log('before'); logTimer(() => console.log('after'));