对连续函数进行排序并在javascript / jquery中调整for循环

时间:2014-03-19 19:37:01

标签: javascript jquery function for-loop

背景:下面的代码选择一个单词或一个图像,并将其显示在我的' abc' DIV。它测量反应时间。

目标:我希望该功能仅运行8次(不是8次按键),记录每次运行的时间,无论按键事件如何(即没有按键时的2000时),我希望此功能运行首先,在完成之后我想运行第二个功能。

我研究了$ deferred方法,似乎未能采用它。此外,我的8个功能运行,根本不是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);

1 个答案:

答案 0 :(得分: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
});