背景:下面的代码选择一个单词或一个图像,并将其显示在我的' 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);
答案 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
});