2

サーバーはイベントを適切に発行しますが、発行コールバックが機能しません。以下では、コンソールに何も記録されていません。

サーバ:

io.sockets.emit('delete hint', {id: id}, function(data){
                    console.log('callback');
                });

クライアント:

socket.on('delete hint', function(data){
    // display a message before deleting
    $('#' + data.id).fadeOut(function(){ 
        $(this).remove();
    });
});

また、コールバックを受信関数に含める必要がある場合に備えて、クライアント側のコードを function(data, fn) として試しました。

Windows を使用していますが、socket.io がイベントを発行しているときにコマンド プロンプトに次のように表示されます。

websocket writing 5:::{"name":"delete hint", "args":[{"id":"1"}, null]}

何が問題なのかわかりません。何が間違っていますか?

4

2 に答える 2

5

コールバックは、受信側コンピューターが呼び出したときに送信側コンピューターで実行されます。

このコードを見てください:

サーバ:

io.sockets.on('connection', connectionFunc);

function connectionFunc (socket) {
    socket.emit('delete hint', "data for client", callThis);
}

//this function is executed when client calls it
function callThis (dataFromClient){

    console.log("Call back fired: " + dataFromClient);
}

クライアント:

    socket.on('delete hint', function(data, callback) {

        console.log("i received: "+ data);
        // call back will fire only when u the next line runs
        callback("the callThis function on server will run");            

    });

これを逆に行うことができます。

于 2014-02-21T03:58:17.743 に答える
1

コールバックを呼び出す必要があります。

socket.on('delete hint', function(data, cb){
    // display a message before deleting
    $('#' + data.id).fadeOut(function(){ 
        $(this).remove();
        cb(null, 'done');
    });
});
于 2013-03-24T19:44:20.603 に答える