2013-01-23 71 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

是的!你如何看待外部庫呢?關鍵是,流量控制模式就是這樣:常見模式,所以將它們分解成可重用的庫是有意義的。但是,實現低級別的基本技巧涉及一些嵌套回調,工作到期隊列,以及大部分存儲索引和計數器。查看任何這些庫的源代碼,以瞭解它們的工作原理。 –