Foros del Web » Programando para Internet » Node.js »

[SOLUCIONADO] callback mi dolor de cabeza

Estas en el tema de callback mi dolor de cabeza en el foro de Node.js en Foros del Web. Hola chicos pues bueno como ya sabesis en mi anterior tema puse algo sobre calbacks pero gracias a Dios ya lo solucione pero me entro ...
  #1 (permalink)  
Antiguo 23/09/2013, 22:49
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 9 años, 6 meses
Puntos: 2
callback mi dolor de cabeza

Hola chicos pues bueno como ya sabesis en mi anterior tema puse algo sobre calbacks pero gracias a Dios ya lo solucione pero me entro de nuevo y es que me pregunto lo siguiente si yo hago halgo dentro de un callback la unica forma de trabajar con ese valor es ahi en el callback?

Código Javascript:
Ver original
  1. function domHistory(session, diseno, conexion, selects, fila5, fila6){
  2.     contenido="<section id='post' class='POST"+fila5.cod+">"+
  3.                     "<section id='row'><a href='../proceso_logeo/index.php?cod="+fila6.nick+"' id='comentPho'>"+diseno.photos(fila5, 70, 60)+"<div>"+fila6.nick+"</div></a>"+
  4.                     "<section id='coment'><span id='gaspEr'>";
  5.     if(fila5.file!==null)
  6.         contenido=contenido+diseno.file(fila5.file, fila5.cod);
  7.     else
  8.         contenido=contenido+"<span></span>";
  9.     selects.difucion(conexion, 'arreglo', fila5.arreglo, function(difucion){
  10.         if(difucion[0].Ucod!==null){
  11.             if(fila5.seguido!==difucion[0].Ucod)
  12.                 contenido=contenido+"<span data-perfil='../proceso_logeo/index.php?cod="+difucion[0].nick+"' data-usua='Pic_4587_d58"+difucion[0].Ucod+"' class='creator'>"+diseno.photos(difucion[0], 48, 40)+"</span>";//añado mas string
  13.             console.log(contenido);//lo muestra bn
  14.         }
  15.     });
  16.     //console.log(contenido);//no muestra lo que le añadi en el callback anterior
  17. }

Talves todabia no entiendo bn el funcionamiento de los callback y yo que creia que sabia javascript
  #2 (permalink)  
Antiguo 24/09/2013, 06:55
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 13 años
Puntos: 17
Respuesta: callback mi dolor de cabeza

a ver, no es exactamente asi, tu puedes usar la variable en sitio que quieras dentro de su ambito (si es de la funcion, global, etc..) la cuestion es el momento en el que se define la variable.

Node.js es asincronimo, por lo tanto, mientras se esta haciendo alguna "cosa", el programa no se queda bloqueado, si no que continua ejecutando lineas mientras que se realiza esa "cosa", una vez que la "cosa" termina, se dispara el callback.

En tu funcion, cuando haces la consulta en la base de dato, esta consulta supone conectar con la bbdd, hacer la peticion, recibir los resultados. lo que se traduce en un determinado tiempo, pero durante este tiempo, tu programa no se congela esperando los resultados de la base de datos, si no que continua ejecutandose y por lo tanto se llama el console.log que no te muestra los resultados. Y no te lo muestra pues como puedes ver, esta linea se ha ejecutado ante de que la conexion con la base de dato haya terminado, por lo tanto los datos no estan disponibles. Cuando la conexión de la base de dato devuelve respuesta se ejecuta el callback, y aqui ya si es 100% que los datos ya estan recibidos y por lo tanto si se muestra dicha información.

Si quieres te invito a hacer una prueba, añade al console.log de la linea 16 un setTimeout de un parde segundo y ejecuta el codigo, verás que cuando pase estos dos segundo se ejecuta el console.log y muestra el resultado que tu realmente esperabas. Con esto quiero destacarte el hecho de que la variable puedes usarla donde quieras dentro del ambito de esta, lo que tienes que cuidar son los tiempos de ejecución. Esto es solo un ejemplo para que lo veas, NO USES NUNCA setTimeout para esto, pues puede quedarte corto o estar esperando innecesariamente. La magia del callback es precisamente que se ejecuta en el momento apropiado (justo despues de que se obtengan los resultados de la funcion).

Si has usado ajax, el concepto deberia ser mas facil de comprender, tu haces la petición y quedas escuchando el evento cuando llegan los datos.. node es el mismo concepto pero aplicado al evento que tu definas.

...Quizas no me he explicado muy claro, si sigues teniendo dudas, pregunta de nuevo e intento explicarlo de alguna otra forma o con algun ejemplo. Pero creo que lo que es la esencia "los tiempos de ejecución" ha quedado bastante remarcado.

Ya nos cuentas que tal. Un saludo!
  #3 (permalink)  
Antiguo 24/09/2013, 08:55
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 9 años, 6 meses
Puntos: 2
Respuesta: callback mi dolor de cabeza

si se me habia olvidado eso se ejecuta pero no congela el resto del script. Como podria yo hacer que se congele el script (sincrono) por que en unas cosas si necesito y me van muy bn los callback pero para esto de las validaciones con mysql tengo problemas. POr que problemas? POr que como todos saben los programas hola mundo aaaaa relajado pero en mi caso estoy pasando un programa hecho en php a node y tengo unas consultas anidadas a otras consultas y ahi es donde veo los problemas Gracias amigo por la atencion
  #4 (permalink)  
Antiguo 24/09/2013, 09:28
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 9 años, 10 meses
Puntos: 17
Respuesta: callback mi dolor de cabeza

Cita:
Iniciado por sonickseven Ver Mensaje
si se me habia olvidado eso se ejecuta pero no congela el resto del script. Como podria yo hacer que se congele el script (sincrono) por que en unas cosas si necesito y me van muy bn los callback pero para esto de las validaciones con mysql tengo problemas. POr que problemas? POr que como todos saben los programas hola mundo aaaaa relajado pero en mi caso estoy pasando un programa hecho en php a node y tengo unas consultas anidadas a otras consultas y ahi es donde veo los problemas Gracias amigo por la atencion
Hola,

Lo que debes hacer es validar todo dentro del callback.. escalona tu script despues del callback pues si lo que chequeas en mysql es importante y sin esos datos no podes continuar..

Código:
// codigo al que testeas en mysql

var identificado = false;

 estaelUsuarioIdentificado( usuario ,  function(respuesta){
            // asicronico 
       if(respuesta === true) identificado = respuesta;

       if(identificado){
             // sigue con el flujo de tu script ya que estas son partes importantes
       }
});

/**
 ** sincrónico , no lo quieres pues entonces
 ** porque tu escript se congelara hasta que este usuario se le compruebe si esta log in
 ** manteniendo otros esperando para entrar a tu sistema.
 **/

/*if(identificado){
     return identificado;
}*/
Medio explicado pero haber si me hice entender.
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #5 (permalink)  
Antiguo 24/09/2013, 09:49
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 9 años, 6 meses
Puntos: 2
Respuesta: callback mi dolor de cabeza

pues bueno talves a lo que le tengo miedo a las que ya conozco personalmente pyramid doom. Pero talves sea solo miedo y pereza. No lo se pero ni modos a hacerlo por que si me quedo quieto no evolucionare.

Por cierto que es eso de las promesas con la librearia Q de npm?
  #6 (permalink)  
Antiguo 17/11/2013, 08:51
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: callback mi dolor de cabeza

Muy buenas! Es mi primer mensaje en forosdelweb y espero poderte ayudar! Justamente me encuentro también liado con el tema de las "promises" y la librería "Q".
He comenzado a experimentar con ello y a hacerme una idea, pero aún me queda mucho por comprender. De todos modos, aquí te dejo alguna ayuda que me ha venido bien para iniciarme.

Saludos!!

Repositorio de "Q" - https://github.com/kriskowal/q
http://strongloop.com/strongblog/promises-in-node-js-with-q-an-alternative-to-callbacks/
https://medium.com/tech-talk/e7c0b0e5ce3c
  #7 (permalink)  
Antiguo 18/11/2013, 20:16
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 9 años, 6 meses
Puntos: 2
Respuesta: callback mi dolor de cabeza

pues bueno te agradezco que participes en mi tema :D . Pero por fin pude entender como funciona node con sus callback (que dolor de cabeza para los futuros aprendices de NODE). Le pregunte a un teso de node y me dijo que hacer NODE sync es como desperdiciar todo el trabajo que se ha hecho en javascript asi que node es nuevo y pues obvio que lo nuevo es algo dificil de entender.

Aunque si me ha quedado como que esa duda hacerca de como funciona Q y demas librerias gracias por tus links :D voy a hecharle un vistaso
  #8 (permalink)  
Antiguo 19/11/2013, 07:34
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: callback mi dolor de cabeza

Cita:
Iniciado por sonickseven Ver Mensaje
pues bueno te agradezco que participes en mi tema :D . Pero por fin pude entender como funciona node con sus callback (que dolor de cabeza para los futuros aprendices de NODE). Le pregunte a un teso de node y me dijo que hacer NODE sync es como desperdiciar todo el trabajo que se ha hecho en javascript asi que node es nuevo y pues obvio que lo nuevo es algo dificil de entender.

Aunque si me ha quedado como que esa duda hacerca de como funciona Q y demas librerias gracias por tus links :D voy a hecharle un vistaso
Me alegro de que resolvieras tus dudas puntuales!! Espero que te sirvan esos links ;) Saludos!!

Etiquetas: callback
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 21:33.