Последовательность последовательных функций и настройка цикла for в javascript / jquery

0

Предыстория: нижеприведенный код выбирает слово или изображение и отображает его в моем "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);
Теги:
for-loop
function

1 ответ

1
Лучший ответ

Ваш код кажется немного раздутым, но если я правильно понял, все, что вам нужно, это 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
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню