繁体   English   中英

node.js和socket.io如何使用回调?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM