[英]node.js and socket.io how use callback?
我正在尝试学习使用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))”,然后等待结果为真/假。
也许有人可以指点我,我在我的思维中犯了错误。
最好的问候马克
将这样的内容放入您的回调中:
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
}
}
函数只返回“ true / false”。
不。您不能像不能从函数的AJAX调用中同步返回响应那样吗? 。 使用回调:
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
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.