gpt4 book ai didi

json - 通过 socket.io 发送匿名函数?

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:40 28 4
gpt4 key购买 nike

我想创建一个客户端函数,它可以使用客户端变量接收和执行任意命令。我将通过使用 socket.io 发送一个包含匿名函数的 JSON 对象来从我的服务器发送这些函数,这将是我的命令。它看起来像下面这样:

//client side

socket.on('executecommand', function(data){
var a = "foo";
data.execute(a); //should produce "foo"
});

//server side

socket.emit('executecommand', {'execute': function(param){
console.log(param);
}});

然而,当我尝试它时,客户端收到一个空的 json 对象 (data == {}),然后抛出异常,因为数据不包含任何方法执行。这里出了什么问题?

最佳答案

JSON 不支持包含 function 定义/表达式。

你可以做的是用你需要的函数定义一个commands对象,然后传递一个commandName:

// client-side

var commands = {
log: function (param) {
console.log(param);
}
};

socket.on('executecommand', function(data){
var a = 'foo';
commands[data.commandName](a);
});
// server-side

socket.emit('executecommand', { commandName: 'log' });

您还可以使用 fn.apply()传递参数并检查 commandName 与带 in 的命令匹配:

// client-side
var commands = { /* ... */ };

socket.on('executecommand', function(data){
if (data.commandName in commands) {
commands[data.commandName].apply(null, data.arguments || []);
} else {
console.error('Unrecognized command', data.commandName);
}
});
// server-side

socket.emit('executecommand', {
commandName: 'log',
arguments: [ 'foo' ]
});

关于json - 通过 socket.io 发送匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865233/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com