我不知道为什么节点j不等到循环中的功能完成。 它只是呼唤功能,但不要等到它完成。 任何人都知道这个问题的解决方案
我去了大楼的所有房间和每个房间的学生都在节点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 :(得分:0)
该功能是异步的。使用paralyze模块等待多个异步回调完成。