2015-04-22 3 views
1

Я написал функцию обратного вызова для захвата моментального снимка запуска видео с помощью управления и холста html5.

Я использовал цикл for для повторения и вызова той же функции обратного вызова, что и захват пакета.

Если я добавлю alert('') в обратном вызове, видеоролик в фоновом режиме, отображающий при отображении предупреждающего сообщения, всплеск мгновенного снимка отлично работает при съемке фотографий (кадров/изображений работающего видео). Но когда я удалил alert(''), видео не запускается в фоновом режиме, а разрытые изображения одинаковы, а не разные.Может ли предупреждение («некоторое сообщение») повлиять на функцию обратного вызова - Javascript

Код

for (var i = 0; i < burstcount; i++) { 
     var wcam = Webcam; 
      wcam.burst_snap(function (dataurl, id) { 
       var arrayindex = passedName + "_" + id; 
       imgid = imgid + i; 
       alert(dataurl); 
       burstcapturedata[arrayindex] = dataurl; 
      }, i); 
      var j = 0; 
      while (j < 10000000000) { 
       j++; 
      } 
    } 
    DisplayBurstedImages(); 

}

+2

Похоже, у вас есть асинхронный вызов и вы лечите его как синхронное. Но без кода я не могу это проверить. – epascarello

+0

@epascarello - добавлен код, можно посмотреть на него, – Navan

+0

Похоже, что burst_snap является асинхронным ... Не уверен, что такое 'burst_snap' ... И этот цикл - это плохая практика. – epascarello

ответ

1

Да, на самом деле. Alert выполняет следующее выполнение кода.
Если ваш код работает с предупреждением, это означает, что вам требуется задержка.
Попробуйте setTimeout или введите код в соответствующее место, где все загружается.

+1

[Не совсем] (http://stackoverflow.com/a/2734311/1048572) – Bergi

0

Думаю, для привязки видео требуется время. вы можете использовать функцию setTimeout для задержки.

var delay =100; 

setTimeout(function() {/*your function*/ }, delay); 

delay = delay + 300; 
+0

Я попробовал это сейчас ребята предложили, что бесполезно .. я не могу выяснить причину еще, предупреждение как-то делает магию здесь, мне нужно объяснение seriuos abt this – Navan

0

Ваш код должен выглядеть следующим образом:

var wcam = Webcam; 
var cnt = 0; 
wcam.burst_snap(function(dataurl, id) { 
    var arrayindex = passedName + "_" + id; //you do not have an array if this is the key 
    imgid = imgid + cnt; //no clue what this is for 
    cnt++; 
    burstcapturedata[arrayindex] = dataurl; 
    if (cnt===burstcount) { 
    DisplayBurstedImages(); 
    } 
}, 100); //no clue what that value is supposed to be 
+0

Я пробовал код, но он вызван только один раз, не до пакета (подразумевается 3). Я не использовал цикл for, я должен использовать для цикла тоже? – Navan

+0

Разве burst_snap вызывает только один раз или он работает несколько раз? Если у меня есть api, было бы легко помочь. Без этого я просто догадываюсь, что делает этот материал. – epascarello

+0

вызов burst_snap происходит только один раз. Я не использую никаких циклов, я должен использовать для цикла. Webcamjs - это api, который я использую для захвата изображений. https://github.com/jhuckaby/webcamjs Я скопировал и вставил функцию привязки api как burst_snap для моего понимания. – Navan