2013-01-23 73 views
0

我有一个node.js的问题。程序的命令不按照时间顺序加载,我不知道该怎么做。 我试图从数据库中下载一些图像和文本,并将其与8包一起发送。但是,node.js同时在循环之后运行循环和命令。Node.js年代问题

这里是我的代码:

socket.on('background_dinamically', function(data){ 
     connection.query("SELECT * FROM products WHERE id='"+data.cathegory+"'" , function(err, rows, fields){ 
      var count = 0; 
      var array_elements = []; 
      if(err){ 
       socket.emit('errorserver'); 
      }else{ 
       for (var i = rows.length - 1, count; i >= 0; i-- & count ++) { 
        array_elements.push(rows[i]); 
        if (count == 8) { 
         socket.emit('image_loading_background', [array_elements, data]); 
         count = 0; 
         array_elements = []; 
        } 
       }; 

       if(count > 0 && count < 8 && count != 0) { 
        socket.emit('image_loading_background', [array_elements, data]); 
       } 
      } 
     }); 
    }); 

回答

0

Marc,首先我会检查是否可以在客户端完成同步。如果您在将数据发送到客户端之前强制您的nodejs应用程序同步,则可伸缩性会受到影响。

如果你不能在服务器端不同步,你可以选择意大利面代码或同步库。

0

欢迎来到异步的世界(不实足)编程。默认情况下,节点将像您所看到的那样并行工作于I/O操作。要获得其他行为(包括按时间顺序排列),并行批处理以及错误处理助手,请查看可用的众多flow control libraries之一。具体而言,我建议caolan/async

+0

有没有办法做到这一点,而无需外部库?谢谢! –

+0

是的!你如何看待外部库呢?关键是,流量控制模式就是这样:常见模式,所以将它们分解成可重用的库是有意义的。但是,实现低级别的基本技巧涉及一些嵌套回调,工作到期队列,以及大部分存储索引和计数器。查看任何这些库的源代码,以了解它们的工作原理。 –