Foros del Web » Programando para Internet » Javascript »

Orden de ejecucion javascript

Estas en el tema de Orden de ejecucion javascript en el foro de Javascript en Foros del Web. Amigos tengo el siguiente problema. tengo las siguientes lineas js. 1 var x = 3; 2 alert(x); 3 var x = mifuncion(x,y,z) // esta funcion ...
  #1 (permalink)  
Antiguo 10/05/2015, 14:49
 
Fecha de Ingreso: abril-2012
Mensajes: 1
Antigüedad: 12 años
Puntos: 0
Orden de ejecucion javascript

Amigos tengo el siguiente problema.

tengo las siguientes lineas js.

1 var x = 3;

2 alert(x);

3 var x = mifuncion(x,y,z) // esta funcion ejecuta un ajax que con x y z trabaja en php y realiza un return para dar un nuevo valor a x , hay un alert antes de devolver nuevo valor

4 alert (x);


// alert de linea 2 me devuelve 3
// luego se gatilla alert de linea 4 devolviendo UNDEFINED
//y luego se gatilla el alert dentro de la funcion......

Por que se ejecuta primero linea 4 y luego linea 3 ??? , mifuncion se ejecuta sin problemas entregando perfecto el valor a return.

De antemano gracias por la ayuda.

Última edición por davinci_loko; 10/05/2015 a las 15:00
  #2 (permalink)  
Antiguo 10/05/2015, 16:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Orden de ejecucion javascript

Eso sucede porque la petición asíncrona no devuelve una respuesta de manera inmediata, es necesario esperar a que cambie el estado de la petición hasta llegar a ser 4 para recién obtener una respuesta a la petición, en cambio, la última alerta ya está definida, por lo que simplemente tiene que ejecutarse.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 11/05/2015, 01:34
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Orden de ejecucion javascript

Bienvenido a las bondades de la programación asíncrona donde la linea de código que está abajo no tiene porque ejecutarse después de la que esta arriba. Bien, esto ya pasa al escribir código modularmente con funciones. Tu puedes definir una función en cualquier espacio del código y luego ejecutarla en cualquier otro lugar.

Aquí es un poco diferente. Has usado eventos click? Pues una petición ajax funciona esecialmente como un evento click. Tu no sabes cuando llegara la respuesta ajax o el click del usuario. Por eso cuando escribes código para estos eventos, registras una función que se ejecute cuando el evento deseado se produzca. El código que viene después de la petición ajax o del click no implica que haya llegado la respuesta ajax o se haya habido un click. Y por tanto es normal que no obtengas el valor deseado.

Tu ejemplo cambiando la petición AJAX por un click:

Código Javascript:
Ver original
  1. var x = 3;
  2.  
  3. alert(x);
  4.  
  5. var x = mifuncion(x,y,z);
  6.  
  7. alert (x);
  8.  
  9. function mifuncion(x, y, z) {
  10.   var sum;
  11.   document.body.onclick = function () {
  12.     sum = x + y + z;
  13.   }
  14.   return sum; // undefined hasta que no se clique. Y cuando se clique con toda probabilidad la función ya se habrá ejecutado
  15. }
__________________
github.com/xgbuils | npm/xgbuils

Etiquetas: javascript-funciones, javascript-function
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:20.