0

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」を返すための2番目の関数が必要です。

「ブラウザ」を使用していたときは、別の外部関数へのコールバックを内部に配置しましたが、ここでは、socket.ioオブジェクトにアクセスする必要があります。

そこで、ここで「if(validate_room(room))」を停止して、結果がtrue/falseになるのを待ちます。

多分誰かが私を指摘するかもしれません、そこで私は私の考えを間違えます。

よろしくマーク

4

2 に答える 2

0

「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        
});
于 2013-03-13T20:52:22.527 に答える