Socket.io动态“on”绑定

时间:2014-01-22 09:08:08

标签: javascript node.js javascript-events socket.io

我有这段代码:

    var action = "getPost";

    clients[socket.id].on(action, function(data) {
                var message = {
                    sender : "",
                    receiver : "moderation",
                    m : {action : action, data: data, socket: socket.id}
                }
                console.log(message);
                console.log("Sockets executing: ", action);
                //process.send(message);
            });

    action = "canIGetHoldedPost";

    clients[socket.id].on(action, function(data) {
                var message = {
                    sender : "",
                    receiver : "moderation",
                    m : {action : action, data: data, socket: socket.id}
                }
                console.log(message);
                console.log("Sockets executing: ", action);
                //process.send(message);
            });

我的问题:当我发出其中一个函数时,它会在正文中使用最后一个操作值("canIGetHoldedPost")执行(m : {action : "canIGetHoldedPost")。如何绑定此函数以获得预期结果?

我不能只在正文中编写所需的动作,因为它将是一个包含许多事件的循环,而不仅仅是我在这里写的两个。

谢谢。

1 个答案:

答案 0 :(得分:2)

这是你需要关闭的用途,你没有得到预期值的原因是,当调用回调时,action的值被替换。

你可能会创建一个绑定事件的函数。这样,action的值将被保留,直到回调被执行。

var action = "getPost";
bind(action);

action = "canIGetHoldedPost";
bind(action);

function bind(ac) {
    var action = ac;

    clients[socket.id].on(action, function(data) {
        var message = {
                sender : "",
                receiver : "moderation",
                m : {action : action, data: data, socket: socket.id}
        }
        console.log(message);
        console.log("Sockets executing: ", action);
        //process.send(message);
    });
}