2016-09-15 62 views
1

我不知道为什么节点js不等到函数完成循环。 它只是调用函数,但不要等到它完成。 任何人都知道这个问题的解决方案如何延迟循环,直到回调函数完成,并继续循环node.js

我去了建筑物的所有房间和每个房间的学生在节点js。

var mysql  = require('mysql'); 
    var dbconfig = { 
     "host"  : "localhost", 
     "database" : "university", 
     "user"  : "root", 
     "password" : "" 
    }; 
    var connection = mysql.createConnection(dbconfig); 
    exports.room = function(req,res){ 
     get_room(function(data){ 
      res.write(JSON.stringify(data)); 
      res.end(); 
     }); 
    }); 

功能得到所有的空间。

function get_room(callback){ 
    connection.query('SELECT * FROM Room', function(err, data){ 
     var Ldata = data.length; 
     if(Ldata > 0){ 
      for(var i=0;i<Ldata;i++){ 
      var roomid = data[i]['roomid']; 
      get_student(roomid,function(student){ 
       data[i].students = student; 
      }); 
      /* wait get student call back complete and continue loop*/ 
      } 
      /* wait untill loop complete*/ 
      callback(data); 
     } 
    }); 
} 

功能让学生在房间里。

function get_student(roomID,callback){ 
    connection.query('SELECT * FROM Student WHERE roomid = '+roomID,function(err, rows) { 
     callback(rows); 
    }); 
} 

我想拿像下面

[ 
    { 
     "roomid": 1,  
     "room_name": "A", 
     "students": [ 
      { "id": "001", "name": "jonh" }, 
      { "id": "002", "name": "richard" }, 
      { "id": "003", "name": "linda" }  
     ] 
    }, 
    { 
     "roomid": 2,  
     "room_name": "B", 
     "students": [ 
      { "id": "011", "name": "swag" }, 
      { "id": "012", "name": "olli" }, 
      { "id": "013", "name": "jia" }  
     ] 
    }, 
] 
+0

您正在使用的Node.js版本是什么? –

+0

我目前的版本是v6.3.1 但是我可以根据需要更改版本 –

+0

我认为如果你开始看“承诺”会对你更好。看看这个线程:https://github.com/mysqljs/mysql/issues/929 –

回答

0

功能是异步采样结果。使用瘫痪模块等待多个异步回调完成。