Используя nodejs и сокеты, я пытаюсь загрузить поток вместе в цикле.Может кто-нибудь сказать, пожалуйста, где я иду не так? - PullRequest
0 голосов
/ 22 сентября 2018

Ниже приведен код, куда я пытаюсь добавить изображение через ajax в сокет.Но когда я запускаю код таким образом, все данные добавляются к последнему изображению, даже если оно в цикле.

socket.on('start', function (cou) {
    for (var i = 0; i < cou.length; i++) {
        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;
        });
    };
});

Может кто-нибудь сказать, пожалуйста, где я ошибаюсь?

1 Ответ

0 голосов
/ 22 сентября 2018

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: я не запускал код, просто следите:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...