2016-09-15 107 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

功能是異步採樣結果。使用癱瘓模塊等待多個異步回調完成。