2014-01-22 61 views
0

所以我想在我的數據庫中顯示一個包含所有「房間」的表格,我也想顯示房間的創建者,但只有用戶的ID存儲在房間表中,所以我必須在用戶表上進行查詢。使用節點js進行2個異步查詢

我想是這樣的:

socket.on('room', function() { 
    connection.query('SELECT * FROM room', function(err, rows) { 
     for(i=0;i<rows.length;i++) { 
      var room_name = rows[i].name; 
      var room_nbPlayer = rows[i].nbPlayer; 
      var room_language = rows[i].language; 
      build_user(rows[i].creator, function(res){ 
       var username = res; 
       io.sockets.volatile.emit('broadcast_room', "<tr>" + 
        "<td>" + room_name + "</td>" + 
        "<td>" + room_nbPlayer + "</td>" + 
        "<td>" + room_language + "</td>" + 
        "<td>" + username + "</td>" + 
        "</tr>");   
      }); 
     } 
    }); 
}); 
function build_user(id,callback){ 
    connection.query('SELECT username FROM user WHERE id ="'+id+'"', function(err, user) { 
     var username = user[0].username; 
     callback(username); 
    }); 
} 

所以,對於爲例,如果我這個功能

build_user(rows[i].creator, function(res){ 

我得到了所有的名稱前嘗試

console.log(room_name); 

,但一旦我在函數中輸入的名字都是一樣的,所以最後我的表是錯誤的。它只有用戶的正確用戶名,但房間查詢顯示的所有變量始終是相同的(這是我的數據庫中的最後一個房間)

謝謝你!

回答

0

發生這種情況是因爲在build_user完成時,您的for循環已達到最後一項。 因此,您的room_name,room_language等是行中的最後一項。 所以你可以通過回調傳遞數據來修復它。

socket.on('room', function() { 
    connection.query('SELECT * FROM room', function(err, rows) { 
     for(i=0;i<rows.length;i++) { 
      build_user(rows[i], function(username, options){ 
       var room_name = options.name; 
       var room_nbPlayer = options.nbPlayer; 
       var room_language = options.language; 
       io.sockets.volatile.emit('broadcast_room', "<tr>" + 
        "<td>" + room_name + "</td>" + 
        "<td>" + room_nbPlayer + "</td>" + 
        "<td>" + room_language + "</td>" + 
        "<td>" + username + "</td>" + 
        "</tr>"); 
      }); 
     } 
    }); 
}); 

function build_user(options,callback){ 
    var id = options.creator; 
    connection.query('SELECT username FROM user WHERE id ="'+id+'"', function(err, user) { 
     var username = user[0].username 
     callback(username, options); 
    }); 
} 
+0

非常感謝您! – user3198601