从socket.io返回一个值到客户端

时间:2019-01-22 15:09:37

标签: javascript node.js express socket.io

我正在尝试从服务器到客户端接收当前抽屉的ID。这就是我到目前为止所得到的

客户端:

    socket.emit('returnDrawer');

    socket.on('returnDrawer', function(ret)
    {
        console.log("id:", ret);
    })

服务器:

socket.on('returnDrawer', function() {
    return users[currentDrawer].ioid;
});

但是当前的抽屉ID根本没有调用我的客户端回调,可以使用一些帮助。

3 个答案:

答案 0 :(得分:1)

您可以将回调函数作为参数发送给emit()。这是我的一个项目中的一个例子。没有抽屉,只有动画。

客户端

socket.emit('animate', 'text', payload, (response) => {
    console.log(response);
});

服务器端

socket.on('animate', (animation, payload, callback) => {

    callback = typeof callback == "function" ? callback : () => {};

    try {
        this.runAnimation(animation, payload);
        callback({status:'OK'});
    }
    catch(error) {
        callback({error:error.message});
    }

});

答案 1 :(得分:0)

您尝试过类似的事情吗:

客户

socket.emit('giveMeDrawer');

socket.on('returnDrawer', function(ret) {
  console.log("id:", ret);
})

服务器

socket.on('giveMeDrawer', function() {
  socket.emit('returnDrawer', users[currentDrawer].ioid);
});

或遵循this指南(来自socket.io文档)。

答案 2 :(得分:0)

您可以使用不同的事件名称进行发送和接收。这将帮助您将来更好地扩展。

例如,上面的代码可以写成:-

// implementing client side
  socket.emit('returnDrawer');
  socket.on('returnDrawerResponse', function(message) {
    console.log('id', message)
  });

对于服务器端,您可以这样写:

// implementing server side
  socket.on('returnDrawer', function(){ 
   // write Your awesome code here
   const userId = users[currentDrawer].ioid()
   socket.emit('returnDrawerResponse', userId)
 })