Javascript Socket.io动态“;关于;结合

Javascript Socket.io动态“;关于;结合,javascript,node.js,socket.io,dom-events,Javascript,Node.js,Socket.io,Dom Events,我有以下代码: var action = "getPost"; clients[socket.id].on(action, function(data) { var message = { sender : "", receiver : "moderation", m : {action : action, data

我有以下代码:

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);
        });
我的问题是:当我发出其中一个函数时,它会在主体(
m:{action:“CanigetHoldePost”
)中使用最后一个操作值(
“CanigetHoldePost”
)执行。如何绑定此函数以获得预期结果


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

这是需要闭包的地方,没有得到预期值的原因是在调用回调时,
操作的值被替换

您可能会创建一个绑定事件的函数。这样,
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);
    });
}

“这是你需要关闭的地方,你没有得到期望值的原因是,在调用回调时,操作的值被替换。”-我已经找到了答案,但不知道如何覆盖它。非常感谢!