如何在回调函数完成之前延迟循环,而不是在node.js中继续循环

时间:2016-09-15 00:54:20

标签: node.js

我不知道为什么节点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" }       
        ]
    },
]

1 个答案:

答案 0 :(得分:0)

该功能是异步的。使用paralyze模块等待多个异步回调完成。