Предыстория: нижеприведенный код выбирает слово или изображение и отображает его в моем "abc" div. Он измеряет время реакции.
Цель: я хочу, чтобы функция выполнялась только 8 раз (не 8 нажатий клавиш), записывать время для каждого запуска независимо от события нажатия клавиши (т.е. время 2000, когда не нажата никакая клавиша), и я хочу, чтобы эта функция выполнялась сначала, и после его завершения я хочу запустить вторую функцию.
Я исследовал $ отложенный метод и, похоже, не смог его принять. Кроме того, моя 8-функция работает, не восемь, но похоже больше, чем 8 одновременных прогонов.
Поэтому в основном я хочу 8 раз запускать свою функцию, затем запускать следующую функцию и записывать время от появления стимула до следующего, если не прерывать нажатие клавиши.
Я застрял с ним в течение некоторого времени и, вероятно, потерял обзор.
var reac_arr = [];
var t1;
function firstFunction(){
var def = $.Deferred();
for (var i = 1; i <= 8; i++) {
$(function cit(){
var timeout = 0;
function showNext(){
t1 = (new Date()).getTime();
if (Math.random() < 0.5) {
var new_word = stim.name;
$("#abc").text(new_word);
}
else {
var new_img = stim.path;
$("#abc").empty();
var prox_img = $('<img id="abcimg">');
prox_img.attr('src', new_img);
prox_img.appendTo('#abc');
}
timeout = setTimeout(function(){
showNext()
}, 2000);
}
$(document).keypress(function(e){
if ($(e.target).is('input, textarea')) {
return;
};
clearTimeout(timeout);
if (e.which === 97 || e.which === 108 || e.which === 32) {
setTimeout(function(){
showNext();
}, 300);
var t2 = (new Date()).getTime();
var reac_time = t2 - t1;
reac_arr.push(reac_time);
}
});
});
};
setTimeout(function() {
def.resolve();
}, 1000);
return def.promise();
}
function secondFunction(){
var def = $.Deferred();
alert("It works!")
};
setTimeout(function() {
def.resolve();
}, 1000);
return def.promise();
}
firstFunction().pipe(secondFunction);
Ваш код кажется немного раздутым, но если я правильно понял, все, что вам нужно, это setInterval().
var counter = 0;
var ticker = setInterval(myFunction,2000);//Setup a function to run every 2000ms
function myFunction()
{
//do your thing
counter++;//
if(counter==8){
//on the 8th time run next function...
}
}
$(document).keypress(function(e){
clearInterval(ticker);//Stop the ticker on keypress
});