2016-05-29 35 views
0

早安,包括不會返回從陣列中的數據

我有一個劇本,即時通訊建設,IM使用包括建模我陣列連接他們回到server.js

數據顯示一個問題/問題到控制檯但不是訪問者,在簡單的網頁上,如果我將查詢和我的建模放在server.js文件中,它有什麼作用,有人爲什麼include不會返回結果與查詢?

Server.js

var io = require('socket.io').listen(3000); 
var data_model = require("./data_model.js"); 
io.sockets.on('connect', function(socket) { 
console.log('There is a connection'); 
io.emit("data", "There is a connection"); 
console.log(data_model.retrieve()); // THIS LINE WORKS, 
socket.emit("dataretrieve", JSON.stringify(data_model.retrieve())); 
}); 

我的數據模型

var mysql = require('mysql'); 
    var connection = mysql.createConnection({ 
    host: "", 
    user: "", 
    password: "", 
    database: "" 
    }); 


var data_model = { 

    retrieve: function() { 

    connection.query('SELECT * FROM data_retrieve', function(err, rows, fields, data) { 

      if (rows.length === 0) { 

      } else { 

       dataretrieve = {}; 

       dataretrieve["data_retrieve"] = {}; 

       dataretrieve["data_retrieve"] = { 
        id: rows[0].id, 
        msg: rows[0].msg 
       }; 

       return JSON.stringify(dataretrieve); 

      } 

     }); 
    } 
}; 

module.exports = data_model; 

當前網頁:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  </script> 
<script src="http://172.0.2.13:3000/socket.io/socket.io.js"></script> 
<script> 
    $(document).ready(function(){ 
    var socket = io.connect('http://172.0.2.13:3000'); 
    socket.on('data', function(data){ 

    document.getElementById('connection').innerHTML = data; 

    }); 
    socket.on('dataretrieve', function(dataretrieve){ 
    console.log(dataretrieve); //WONT SHOW THE DATA 
    }); 

    }); 
</script> 
<body> 
    <pre> 
<div id="connection"></div> 
    <div id="dataretrieve"></div> 
+0

你的結果從'connection.query()'是異步的。因此,當您的'retrieve()'函數返回時,數據還不可用。您需要使用承諾或回調來將所得到的異步數據傳回給調用者,而不是簡單的返回值。請參閱重複以獲取您的選項的說明。 – jfriend00

回答

0
var data_model = { 

    retrieve: function(cb) { 

    connection.query('SELECT * FROM data_retrieve', function(err, rows, fields, data) { 

      if (rows.length === 0) { 

      } else { 

       dataretrieve = {}; 

       dataretrieve["data_retrieve"] = {}; 

       dataretrieve["data_retrieve"] = { 
        id: rows[0].id, 
        msg: rows[0].msg 
       }; 

       cb(JSON.stringify(dataretrieve)); 

      } 

     }); 
    } 
}; 

變化代碼調用從

012檢索
socket.emit("dataretrieve", JSON.stringify(data_model.retrieve())); 

data_model.retrieve(function(data){ 
    socket.emit("dataretrieve",data); 
}) 
+0

你可以給我更多的信息,因爲我不明白你的意思。 –