2016-03-29 4 views
1

У меня есть массив объектов клиентов, поэтому я использую для цикла для итераций над ним. У меня есть clients.lenght = 2, но он итерации только 1. И у меня нет проблемы с переменной областью здесь , Просто не понимаю, почему это происходит. Коддля цикла итерации только один раз

socket.on('idleDisconnectAllClient', function(receivedData) { 
    LOG("idleDisconnectAllClient"); 

    var clientIndex = findMainIndexByDataBaseID(receivedData.dataBaseID); 
    if (clientIndex != -1) { 
     console.log('clients lenght', clients[clientIndex].data.length); 
     for (var i = 0; i < clients[clientIndex].data.length; i++) { 
      var client = clients[clientIndex].data[i]; 
      client.disconnect(); 

      console.log('client ' + i); 
     } 
    } 
}); 

Консоль

2016-03-29 04:13:01 - idleDisconnectAllClient 
clients lenght 2   
client 0 
+0

Я отправляю консольный ответ. Это 2 – SLI

+1

Попробуйте 'var clientsLen = clients [clientIndex] .data.length;' и скорректируйте свой цикл 'for (var i = 0; i jpaljasma

+0

Это помогает! Спасибо. – SLI

ответ

1

jpaljasma - https://stackoverflow.com/users/2079695/jpaljasma помогает мне понять проблему.

Когда я использую - client.disconnect(), это просто удаляет текущий клиент из массива клиентов. Поэтому вот почему мой цикл выполняется только 1 раз.

0

можно перебирать с помощью конструкции ES5 forEach:

clients[clientIndex].data.forEach(client => client.disconnect()) 

(отказ от ответственности, это использует жирные стрелки от ES6, может не работать на старых версиях узлов)

Смежные вопросы