【发布时间】:2018-12-31 10:48:40
【问题描述】:
var data = bar();
function bar() {
var result;
socket.emit('message', 'test');
socket.on('msg', function(message) {
result = message;
});
return result;
}
这里,结果值是undefined。如何将socket.on函数检索到的值赋给result变量并返回?
这是我接收socket.io消息事件的另一端。
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket, username) {
socket.on('message', function(message) {
var result = 'test value'
socket.emit('msg', result);
});
});
尝试在确认中返回一个对象。
io.sockets.on('connection', function (socket) {
socket.on('message', function(message, ackCallback) {
console.log("server received message", message);
var result = tools.execute(message);
console.log(typeof(result)); // result is returned a object
ackCallback(result);
});
});
附:我试图传递一个简单的对象
var result = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
ackCallback(result);
正在为此对象传递结果值。
tools.execute(消息);正在返回这个对象。哪个没有通过 ackCallback 传递。
{ uuid: '155C75EA-CB23-4172-85EB-3E256A271D8D', 姓名: '', 类型:'Object3D', 父母:空, 孩子们: [ { uuid:'D778A19B-F935-4B06-8536-54494BC5F920', 姓名: '', 类型:“网格”, 父母:[循环], 孩子们: [], 上:[对象], 位置:[对象], 旋转:[对象], 四元数:[对象], 规模:[对象], 矩阵:[对象], 矩阵世界:[对象], 矩阵自动更新:真, 矩阵世界需要更新:假, 层:[对象], 可见:真实, castShadow:假, 接收阴影:假, frustumCulled:是的, 渲染顺序:0, 用户数据: {}, 几何:[对象], 材料:[对象], 绘制模式:0 }, { uuid: '9FD1CACF-6A2B-4932-8FA2-B0A4AF618F8D', 姓名: '', 类型:“网格”, 父母:[循环], 孩子们: [], 上:[对象], 位置:[对象], 旋转:[对象], 四元数:[对象], 规模:[对象], 矩阵:[对象], 矩阵世界:[对象], 矩阵自动更新:真, 矩阵世界需要更新:假, 层:[对象], 可见:真实, castShadow:真的, 接收阴影:假, frustumCulled:是的, 渲染顺序:0, 用户数据: {}, 几何:[对象], 材料:[对象], 绘制模式:0 } ], 向上:{ x:0,y:1,z:0}, 位置:{ x: 0, y: 0, z: 0 }, 回转: { _x: 0, _y: 0, _z: 0, _order:'XYZ', onChangeCallback: [功能: onRotationChange] }, 四元数: { _x: 0, _y: 0, _z: 0, _w: 1, onChangeCallback: [功能: onQuaternionChange] }, 比例:{ x:1,y:1,z:1}, 矩阵:{ 元素:Float32Array [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] }, 矩阵世界:{ 元素:Float32Array [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] }, 矩阵自动更新:真, 矩阵世界需要更新:假, 层:{掩码:1}, 可见:真实, castShadow:假, 接收阴影:假, frustumCulled:是的, 渲染顺序:0, 用户数据:{} }
【问题讨论】:
-
@SamiX:感谢您的回复,我是 JS 新手。你能用回调修改上面的代码吗?这可以帮助我轻松理解。
-
你确定
tools.execute(message)是同步的并返回结果吗? -
@jfriend00:是的,它是同步的。现在我删除了该函数并为其分配了一个虚拟字符串值并进行了测试。不过,我没有得到预期的输出。
-
@Barmar - 我没有将此标记为那个规范问题的重复,因为这只会让 OP 想知道如何使这些技术与他们的 socket.io 东西一起工作,如果你看看这两个我写的并且他们接受的解决方案,他们不可能仅仅通过阅读那个副本来获得这两个选项。所以,我在那里画线。如果您要添加与 OP 的特定代码和他们需要的特定类型的解决方案相关的真正独特的信息,那么仅仅标记该规范答案的另一个副本是没有任何好处的。
标签: javascript jquery node.js websocket socket.io