我试图了解如何使用node.js和socket.io。 我在PHP之前使用过,而且我无法理解如何在node.js中使用回调。
我将部分代码分配给socket.io
if (validate_room(room)) {
console.log('Room exist');
io.sockets.clients(room).forEach(
function (socket) {
console.log(socket.id);
});
//do some fucnction using socket interface
} else {
console.log('Room not exist');
//do other function using socket interface
}
你可以看到,我需要访问io.sockets对象。
validate_room上面的函数
function validate_room(room) {
mysql_connection.query('SELECT * FROM rooms WHERE room = ' + mysql_connection.escape(room), function(err, rows, fields) {
if (err)
throw err;
if (rows.length.toString() > 0) {
console.log('Validate room - true: ', rows.length.toString());
return true;
}
console.log('Validate room - false: ', rows.length.toString());
return false;
});
}
我需要第二个功能才能返回" true / false"。
当我使用"浏览器"我只是把内部回调放到另一个外部函数,但在这里我需要访问socket.io对象。
所以我想拥有" if(validate_room(room))"这里停下来等待结果为真/假。
也许有人可以指出我,我在思考中犯了错误。
祝你好运 马克
答案 0 :(得分:0)
将这样的内容放入你的回调中:
if (err)
throw err;
afterRoomValidation(rows.length.toString() > 0);
和功能:
function afterRoomValidation(isValid) {
if (isValid) {
console.log('Room exist');
io.sockets.clients(room).forEach(function (socket) { console.log(socket.id); });
//do some fucnction using socket interface
} else {
console.log('Room not exist');
//do other function using socket interface
}
}
答案 1 :(得分:0)
函数只返回“true / false”。
没有。你不能像can't synchronously return the response from an AJAX call from a function?那样那样做。使用回调:
function validate_room(room, validCallback, invalidCallback) {
mysql_connection.query('SELECT * FROM rooms WHERE room = ' + mysql_connection.escape(room), function(err, rows, fields) {
if (err)
throw err;
if (rows.length.toString() > 0) {
console.log('Validate room - true: ', rows.length.toString());
validCallback();
} else
console.log('Validate room - false: ', rows.length.toString());
invalidCallback();
}
});
}
和
validate_room(room, function() {
console.log('Room exist');
io.sockets.clients(room).forEach(function (socket) {
console.log(socket.id);
//do some fucnction using socket interface
});
}, function() {
console.log('Room not exist');
//do other function using socket interface
});