我在传递查询的返回值时遇到问题。
当我尝试console.log时我的函数内的返回值。它显示了所有数据,但是当我尝试使用return
时,它并没有传递数据undefined
。
这是我的代码:
server.js
var express = require('express');
var app = express();
var mysql = require('mysql');
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 8000;
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'node'
});
app.use(express.static(__dirname + '/public'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
connection.connect();
function loadList() {
connection.query('SELECT * FROM inventory', function(err, rows, fields){
if(err) throw err;
//console.log(rows); --this is ok
return rows; //cant return the data
});
}
io.on('connection', function(socket){
console.log('A user is connected!!');
var product_list = loadList(); //return no result
socket.emit('inventory list', {list: product_list});
socket.on('disconnect', function() {
console.log('user disconnected!');
});
});
http.listen(8000, function() {
console.log('Listening on ' + port);
});
对于我的index.html
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="/bower_components/jquery/dist/jquery.min.js"></script>
<script type="text/javascript">
try {
var socket = io.connect('http://127.0.0.1:8000');
//console.log(socket);
}catch(e) {
console.log('ERROR OCURRED: ' + e);
}
if(socket !== undefined) {
socket.on('inventory list', function(data){
console.log(data.list); //undefined return
});
}
</script>
你能帮我解决这个问题吗?
答案 0 :(得分:1)
在nodejs中,I / O操作是异步的,因此您需要使用回调样式(或使用某些库来管理此行为,如promises或async), 看看this reference
function loadList(callback) {
connection.query('SELECT * FROM inventory', function(err,rows,fields{
//if(err) throw err; // when a error happen this will finish the main process
if(err) return callback(err);
return callback(null,rows)
});
}
io.on('connection', function(socket){
console.log('A user is connected!!');
loadList(function(err,product_list){;
socket.emit('inventory list', {list: product_list});
}
});