在我准备好使用它之前,我不想运行socket.emit

时间:2016-10-30 21:12:24

标签: node.js sockets express socket.io

所以我不想从服务器socket.emit中获取,直到我需要它为止。因为在那之前一切都没有完全准备好。我怎么有socket.emit静静地坐着,直到我准备好了?

服务器

 io.sockets.on('connection', function (socket) {
    socket.on('adduser', function(player){
    ........
    }

    socket.emit('getQ', socket.Ques[0].question);

    ]

客户端

    var retrieveQ = function (){
    socket.on('getQ', function(quesPick){
        quesObj = quesPick;
    })

客户端很快就会检索它,而不是假设在启动时完成,但是socket几乎立刻就会发出错误,因为socket.Ques直到稍后才会出现。

3 个答案:

答案 0 :(得分:0)

简单,在客户端套接字连接后响应客户端请求发出getQ。像这样:

io.sockets.on('connection', function (socket) {
    socket.on('adduser', function(player){
    ........
    }
socket.on('askGetQ', function(zzz){
        socket.emit('getQ', socket.Ques[0].question);
    }    
}

在客户端上执行:

io.on('connection', function(socket){
  socket.emit('getQ', 'something');
});

答案 1 :(得分:0)

node.js是一个事件驱动的环境。因此,在将来的某个时间,您的服务器上会出现某种事件,导致您希望发送此.emit()。此时,您需要能够找到相应的socket对象,然后使用它来发送.emit()

由于您还没准确说出要用于发送此内容的事件,因此我们无法提供更具体的帮助。如果你想解释一下,我们可能会提供具体的代码。

答案 2 :(得分:0)

在客户端上你应该这样做:

  const chat = io.connect('http://localhost/chat')
  chat.on('connect', function () {
    chat.emit('getQ', socket.Ques[0].question);
  });