node.js начнет выполнять этот цикл асинхронно, что означает, что он не будет ждать окончания записи, поэтому значение переменной i изменяется.используйте вместо этого асинхронный цикл:
socket.on('start', function (cou) {
let i = 0;
async.eachLimit(cou, 1, function(el, done){
var image = document.getElementById('cam'+i);
var divSocket = io(location.origin + 'cam'+i);
divSocket.on('data', function (data) {
var bytes = new Uint8Array(data);
image.src = 'data:image/jpeg;base64,' + bytes;
});
divSocket.on('end', function () {
i++;
done();
});
};
});
посмотрите на здесь
ps: я не запускал код, просто следите:)