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

[SOLUCIONADO] Yo se, Yo se callback se demora y despues hace pero como solucion esto?o

Estas en el tema de Yo se, Yo se callback se demora y despues hace pero como solucion esto?o en el foro de Node.js en Foros del Web. Hola muchachos como estan. De antemano si me disculpo sigo con el mismo problema tengo unas consultas que tengo que hacer y que si "el ...
  #1 (permalink)  
Antiguo 25/09/2013, 19:39
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Yo se, Yo se callback se demora y despues hace pero como solucion esto?o

Hola muchachos como estan. De antemano si me disculpo sigo con el mismo problema tengo unas consultas que tengo que hacer y que si "el resultado de esa consulta es un callback por lo tanto se demora un poquito pero el programa funciona" pero bueno aca les dejo mi MALDITO PROBLEMA me tiene muy lento en cuanto a programacion se refiere solo retrasos debido a que la logica para solucionar es diferente con esto de los callback, Ya se bn como funcionan pero en algunas veces necesito que el programa se sincrino o mas bn les pregunto a uds como solucionarian esto. POngo una imagen en la cual esplica un poco mejor lo que quiero hacer:

contenido se va llenanado cada vez que va bajando por medio de la funcion :( pero como son callback no se llena asi no mas si no despues lo cual hace que contenido no salga como se espera. Alguien me dijo que si usaba un setTimeout de javascript pero creo que es algo obsoleto y ademas es un ciclo que se esta repitiendo :( no se ni lo he probado y aqui el codigo:
Código Javascript:
Ver original
  1. function domHistory(session, usuario, 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>";
  13.                 validar=true;
  14.             }                
  15.             contenido=contenido+'</span>'+diseno.usuarios(fila5.historia, fila5.cod)+' </section>'+
  16.                     '</section>'+
  17.                 "<section id='row' class='all'>"+
  18.                     "<div>"+
  19.                     "<div class='Media"+fila5.cod+"'><div>"+
  20.                     "</div>"+
  21.                 "</section>"+
  22.                 "<section id='row'>";
  23.             if(session.user!==undefined){
  24.                 slt.followValidator(conexion, 'seguidor_seguido', 'seguido', fila5.seguido, 'seguidor', String(session.user).substr(4), function(a){
  25.                     if(a.length>0){
  26.                         slt.followValidator(conexion, 'seguidor_seguido', 'seguidor', fila5.seguido, 'seguido', String(session.user).substr(4), function(amigo){
  27.                             if(amigo.length>0){
  28.                                 contenido=contenido+"<div";
  29.                                 if(fila6.conectado==='1'){
  30.                                     contenido=contenido+" class='conectado'";
  31.                                 }else{
  32.                                     contenido=contenido+" class='desconectado'";
  33.                                 }
  34.                                 contenido=contenido+'id="CHAT" onclick="javascript:(createChat('."'user_".$fila5["seguido"]."'".'))"></div>';// createChat('."'user_".$fila5["seguido"]."'".')
  35.                             }else{//aqui se tiene que hacer esto abligatoriamente!!!!!!!!!!!!!!!!!!!!!!!!!!!
  36.                                 contenido=contenido+'<div class="nofriend"></div>';
  37.                             }
  38.  
  39.                         });
  40.                     }else{
  41.                         contenido=contenido+'<div class="nofriend"></div>';
  42.                     }
  43.                 });
  44.             }else{
  45.                 contenido=contenido+'<div class="nofriend"></div>';
  46.             }
  47.         }
  48.     });
  49. }

como pueden ver tengo un problema que primera vez en mi vida me siento bruto y aqui en esta página me muestran como solucionar el problema de los callbacks
http://www.aprendiendonodejs.com/201...lbacks-en.htmlhttp://www.aprendiendonodejs.com/201...lbacks-en.html

chicos graciass creanme que para tambien es molesto estar a cada rato preguntando pero como digo ya lo que estoy haciendo no es un HOLA MUNDO es algo ya mas avanzado :(
  #2 (permalink)  
Antiguo 03/10/2013, 21:31
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 3 meses
Puntos: 103
Respuesta: Yo se, Yo se callback se demora y despues hace pero como solucion esto?o

Que lindo problema, la verdad te esmeraste tanto en explicarte, que te tengo que felicitar, eres un ejemplo a seguír. Mira, quisiera poder ayudarte en tu pregunta, pero te voy a decir la verdad.
Me parece que te estas esforzando mucho por devolverle al cliente un poco de texto html, unas lineas nomás, pero tratas de meter mucha información dentro. Yo te recomendaría dos posibles soluciones.

Una es que, uses una base de html, y le agreges datos luego, cuando puedas, y cuando lo termines lo envias al cliente.

Te podria recomendar Jade para este caso, no lo probé pero me lo recomendaon muchos colegas !

La otra, que sería la que me gustaría hacer a mi ( es mi forma ). Es que los datos importantes ( como si te siguen, el nombre del usuario , etc.. ) Lo juntas en un objeto de Javascript, y o mandas como JSON, luego desde el navegador lo interpretas, y a travéz de Javascript, creas los elementos y le asignas las propiedades. Te recomiendo esta forma, por que es la mas limpia y fácil.

Imaginate que en un futuro quieres cambiar el HTML, tendrias que cambiar codigos internos del servidor ( en argentina diríamos : "es un pijazo" ). en cambio, si solo envias los datos más importantes, en forma de un objeto, luego tranquilamente desde el navegador puedes modificar el HTML generado, sin tener complicaciones en el servicio, dandose de forma gradual

Bueno, un saludo !
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #3 (permalink)  
Antiguo 05/10/2013, 22:53
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 3 meses
Puntos: 17
Respuesta: Yo se, Yo se callback se demora y despues hace pero como solucion esto?o

Es un poco como queres hacer node.js parecido a Apache, el cual si es posible de hacer pero para mi node.js is crear algo real tener datos a la mano sin necesidad de estar haciendo tanto httprequest como se hace con Ajax, sin embargo no hay nada que me cambie el uso de apache para servir html and php para parsearlo...

No se es mi punto de vista en si, lo que hago creo elementos en apache y php y los actualizo con node.js y socket.io en este caso...
Mis dos centavos en la platica.
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #4 (permalink)  
Antiguo 07/10/2013, 19:20
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Yo se, Yo se callback se demora y despues hace pero como solucion esto?o

hola chicos pues bueno lo solucione pero debo decir que me demore bastante. lo que tu dices de modelos de html como jade lo pense pero en vez de archivos jade lo intente con archivos hbs mejor conocidos como handlebars que es muy similar. PERO no pude ya que en el problema de arriba (en codigo) me falto terminarla. Pero lo que continuaba era unas funciones que estaban aparte mejor dicho era un mierdero!!! cosa que me quedaria mucho mas grande con esos archivos (eso no significa que no los utilizare a futuro :D ) ahora como lo soluciones????. Pues bueno debiado a que yo antes de node programe en PHP y demas lenguajes siempre pienso como ellos (sync) pero con node es diferente. Supe que tenia que acoplarme o acoplarme de lo contrario nunca lograria avanzar y gracias a Dios des pues de unos dias de pensar como solucionarlo al estilo node lo pude hacer :D . LO que hice fue ordernar las consultas por que estaba repitiendo unas y otras no tenbian que estar de ultimas sino de primeras el caso es que habia que ordenar y despues le pase todos los resultados de esas consultas en un objeto a otra funcion sincroma. AQUI ESTA EL CODIGO PERO ES ALGO LARGO PERO FUNCIONA SI ALGUIEN PONE OTRA FORMA DE SOLUCIONARLO ESCRIBAN ABAJITO :D :
Código Javascript:
Ver original
  1. function histori(dato, callback) {//es la que inicia todo desde el socket!!
  2.     var usuario = dato.meet.substr(17).substr(0, dato.longs.substr(8)), session=dato.session;
  3.     var historias = [], userObj = [];
  4.     timeLine(conexion, usuario, function(a){
  5.         var loop = a.length, count = 0, abc=1;
  6.         a.forEach(function(ele, ind){// se hace un foreach para recorrer el array ind es el indice y ele es el cotenido
  7.             slt.selectEspecific(conexion, ['nick', 'nombres', 'conectado'], 'usuario', 'cod', ele.seguido, 'cod', '', 0, 1, function (user){
  8.                 if(ele.NoSee!==null){
  9.                     switch(ele.NoSee){
  10.                         case String(usuario):
  11.                         abc+=1;//no hace nada pero se va sumando
  12.                         //console.log('no lo ve el dueño', ind);
  13.                         break;
  14.                         case '0000':
  15.                         abc+=1;//no hace nada pero se va sumando
  16.                         //console.log('no lo ve nadie', ind);
  17.                         break;
  18.                         default:
  19.                         domHistory(session, usuario, diseno, conexion, slt, ele, user[0], function(e){//la que hace todas las consultas
  20.                             if(historias.length+abc===loop){//si los dos son iguales envia el callback al usuario osea un array :D
  21.                                 callback(historias);
  22.                             }
  23.                             historias.push(e);
  24.                         });
  25.                         break;
  26.                     }
  27.                 }else{
  28.                     domHistory(session, usuario, diseno, conexion, slt, ele, user[0], function(e){//la que hace todas las consultas
  29.                         if(historias.length+abc===loop){
  30.                             callback(historias);
  31.                         }
  32.                         historias.push(e);
  33.                     });
  34.                 }
  35.             });
  36.         });
  37.     });
  38. }
  39.  
  40. function domHistory(session, usuario, diseno, conexion, selects, fila5, fila6, callback){//funcion que hace todas las consultas y las envia a otra para que cree lo que es el diseño
  41.     var datos={};
  42.     datos.fila5=fila5;
  43.     datos.fila6=fila6
  44.     slt.difucion(conexion, 'arreglo', fila5.arreglo, function(difucion){
  45.         datos.difucion=difucion[0];
  46.         slt.CountAnswer(conexion, fila5.cod, function(CountAnswer){//cantidad de respuestas de la historia
  47.             if(CountAnswer.length>0)
  48.                 datos.cantidad=CountAnswer[0].cantidad;
  49.             slt.numerosLikeNo(conexion, 'gustarNogustar', 'historia', fila5.cod, 'gustaNOgusta', 1, function(a){
  50.                 if(a)
  51.                     datos.likeCount=a;
  52.                 slt.numerosLikeNo(conexion, 'gustarNogustar', 'historia', fila5.cod, 'gustaNOgusta', 0, function(a){
  53.                     if(a)
  54.                         datos.nolikeCount=a;
  55.                     if(session.user!==undefined){//comprueba que el usuario este logeado
  56.                         if(parseInt(String(session.user).substr(4))===fila5.seguido)//si el usuario es el dueño de la historia
  57.                             datos.usuario=1;//siginifica que elimina su historia
  58.                         else
  59.                             datos.usuario=2;//difunde esa historia
  60.                         var column=['historia', 'usuario', 'gustaNogusta'];
  61.                         var dato=[fila5.cod, String(session.user).substr(4), 1];
  62.                         slt.UniversalSelect(conexion, 'gustarNogustar', column, dato, 'cod', '', 0, 10, function(resul){//busca si el usuario ya le dio gustar para que no lo vuelva a hacer
  63.                             if(resul.length<1)
  64.                                 datos.meLike=1;
  65.                             column=['historia', 'usuario', 'gustaNogusta'];
  66.                             dato=[fila5.cod, String(session.user).substr(4), 0];
  67.                             slt.UniversalSelect(conexion, 'gustarNogustar', column, dato, 'cod', '', 0, 10, function(resul){//busca si este usuario ya le dio no me gusta
  68.                                 if(resul.length<1)
  69.                                     datos.meNolike=1;
  70.                                 slt.followValidator(conexion, 'seguidor_seguido', 'seguido', fila5.seguido, 'seguidor', String(session.user).substr(4), function(ValiSegui){
  71.                                     if(ValiSegui.length>0){
  72.                                         slt.followValidator(conexion, 'seguidor_seguido', 'seguidor', fila5.seguido, 'seguido', String(session.user).substr(4), function(ValiSegui){
  73.                                             if(ValiSegui.length>0)
  74.                                                 datos.ValiSegui=1;//son amigos
  75.                                             else
  76.                                                 datos.ValiSegui=2;//no son amigos
  77.                                             datos.session=session;
  78.                                             callback(diseno.CrearDom(datos));//la funcion CreaDom devuelve un dato que es un string el cual tiene el diseño en html no lo muestro por que eso ya es normal la magia viene aqui
  79.                                         });
  80.                                     }
  81.                                 });
  82.                             });
  83.                         });
  84.                     }
  85.                 });
  86.             });
  87.         });
  88.     });
  89. }

se me habia olvidado decirles que yo trabajaba o trabajo con php entonces tengo mi proyecto en apache y me conecto con socket con la direccion ip de mi pc:3000 que es el puerto donde esta node

Etiquetas: callback, demora, solucion
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 11:23.