向所有房间成员发送消息后如何调用函数?

How to call function after sending msg to all room members?

在socket.io服务器端。在向他们发送消息后,我想从房间中删除所有用户。但在消息发送给所有用户之前,他们会被从房间中移除

socket.broadcast.to('myFavRoom').emit('good_bye_friends', {'reason':'server is loaded'});   


for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
          if (io.sockets.connected[socketID]) {
                io.sockets.connected[socketID].leave('myFavRoom');
              }
      }

如何在向所有客户端发送消息后调用循环?

如果 broadcastemit 调用没有回调来知道它们何时完成,您可能只需要等待。如果他们在完成时不告诉您,您必须猜测服务器需要多长时间。

类似于:

socket.broadcast.to.emit() setTimeout( function(){ //for loop to remove from rooms }, 2000 );

使用 Q 库 https://github.com/kriskowal/q:

注意:我真的从未使用过它,也不知道它是如何工作的,但我认为它可能是这样的:

Q.fcall(function() {
    socket.broadcast.to('myFavRoom').emit('good_bye_friends', {'reason':'server is loaded'});
})
.then(function() {
    for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
          if (io.sockets.connected[socketID]) {
              io.sockets.connected[socketID].leave('myFavRoom');
          }
     }
})
.catch(function (error) {
    // Handle any error from all above steps
})
.done();

这是对我有用的最终代码。在一个循环中,我发出了味精并让客户离开房间

 for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
                clientSocket = io.sockets.connected[socketID];
                if (clientSocket) {
                    clientSocket.emit('good_bye_friends', {'reason':'server is loaded'});
                    clientSocket.leave('myFavRoom');
                }
            }