выполнение socket.io в цикле

130
15 мая 2019, 09:50

Столкнулся с такой проблемой при использовании socket.io: есть цикл в нем находится socket.emit('event', callback) у меня не получается дождаться ответа от on и обрабатывается только последнее значение цикла. Как мне дождаться ответа socket.emit и дождаться выполнения и после выполнения продолжать перебор цикла. пробовал async / await, не помогает

Серверная часть:

socket.on ('GetProducts',  (params, callback) => {
    idCat =  params['idCat'];
    var url = 'страница json'
     http.get (url, res => {
      res.setEncoding ('utf8');
      var body = '';
       res.on ('data', data => {
        body += data;
      });
      res.on ('end',  () => {
        json =  JSON.parse (body);
        callback (json);
      });
    });
  });
});

Клиентская часть:

function ControlChecked () {
  $ ('#tableListProductLeads').empty ();
  socket = [];
  $ ('#tableCategoreLeads > tr > th > input').each ( (index, element) => {
    if ($ (element).is (':Checked')) {
      socket[index] =  io (ArdServ);
      idCat =  $ (element).attr ('idCat');
       socket[index].emit ('GetProductsLeads', {idCat},  data => {
        data =  data['data'];
          FilltableListProductLeads (data, idCat);
      });
    }
  });
}
Answer 1

Если я правильно понял, то вы в цикле плодите новые сокеты? Может достаточно одного и создать событие на клиенте для прослушивания ответа?

Переделайте так:

Серверная часть:

socket.on ('GetProducts',  (params, callback) => {
    idCat =  params['idCat'];
    var url = 'страница json'
     http.get (url, res => {
      res.setEncoding ('utf8');
      var body = '';
       res.on ('data', data => {
        body += data;
      });
      res.on ('end',  () => {
        json =  JSON.parse (body);
        callback (json);
      });
    });
  });
});

Клиентская часть:

function ControlChecked () {
  $ ('#tableListProductLeads').empty ();
  socket = [];
  $ ('#tableCategoreLeads > tr > th > input').each ( (index, element) => {
    if ($ (element).is (':Checked')) {
      socket[index] =  io (ArdServ);
      idCat =  $ (element).attr ('idCat');
      GetProductsLeads(socket[index], idCat);
    }
  });
}
function GetProductsLeads(socket, id) {
    socket.emit ('GetProductsLeads', {id},  data => {
       data =  data['data'];
       FilltableListProductLeads (data, id);
    });
}
READ ALSO
Не работает Google+

Не работает Google+

в сервисе Поделиться от Яндекс: https://techyandex

129
Как заменить точку на запятую в input type=“number”?

Как заменить точку на запятую в input type=“number”?

Как можно заменить точку на запятую в input type="number", при этом сохранить ввод отрицательных чисел и диапазон, установленный в HTML?

144
.split is not a function

.split is not a function

Вроде гуглил и ошибка такая возникает когда передается не StringЗдесь вроде всё ок, но почему то ошибка

174