Socket.io迭代数组

时间:2015-07-30 17:18:25

标签: arrays node.js sockets

我一直在寻找我的问题的答案,所以任何帮助将不胜感激。我会尽量详细说明。

当用户访问该网站时,每个用户都可以使用此功能获得自己的房间:

socket.on('join', function(id){
    socket.join(id.id);
    console.log('user: ' + id.id + ' connected');
});

我有状态表和评论表。

我有这个ajax函数,它将注释表单数据发送到注释控制器,保存注释,然后从创建状态的人和所有评论过该状态的人中检索一系列id,数组是[7,8,9]。然后我将此数据传递给Socket.io服务器。

$('.comments-button').click(function(e){
    e.preventDefault();
    var formData = $(this).closest('.comments-form').serialize();

    $.ajax({
        type: 'POST',
        url: '/'+websiteName+'/comments/add',
        data: formData
    }).done(function(data){
        socket.emit('comment', {user_id: data});
    });
});

我的问题是,在Socket.io服务器中我试图遍历已传递的id的数组,然后对于我想发送通知的每个id。我通过只传递一个id来发送单个套接字通知,但我无法弄清楚如何从一个数组中发送socket.io中的多个通知。

我知道你不会怎么做,只是作为我所寻找的一个例子:

socket.on('comment', function(data){
    var id = data.user_id; // id's array = [7,8,9]
    for(var user_id in id)
    {
        socket.to(user_id).emit('notification');
    }
});

更新: 我发现如果我像这样编写forEach函数它可以工作

socket.on('comment', function(data){
    [7,8,9].forEach(function (user_id) {
        console.log('Notification sent to: ' + user_id);
        socket.to(user_id).emit('notification')
    });
});

但它不能与传入的data.user_id一起使用,即使它是[7,8,9]的数组

socket.on('comment', function(data){
    data.user_id.forEach(function (user_id) {
        console.log('Notification sent to: ' + user_id);
        socket.to(user_id).emit('notification')
    });
});

1 个答案:

答案 0 :(得分:0)

一个简单的for语句就可以解决这个问题

for (var i = 0; i < id; i++) {
  socket.to(id[i]).emit('notification')
}

forEach

data.user_id.forEach(function (user_id) {
  socket.to(user_id).emit('notification')
})