我想用特定的计时器调用一个函数。 我已经知道了setTimeout()函数,但是我遇到了一个问题,这里是:
// mysounds is an array of audio div
mysounds .forEach(function(value, i) {
myLoop($("#"+value+"_s")[0].duration*1000);
// I call my function with the duration of the sample from the audio div in parameter
});
function myLoop (timer){
setTimeout(function (){
alert('hello');
}, timer);
}
因此,您可以看到forEach循环将异步调用 - >阵列中的所有声音将同时播放,我希望它们一个接一个地播放..
答案 0 :(得分:2)
你可以使用promises,promises代表计算最终值而不是直接值。首先,让我们将setTimeout
转换为承诺:
function delay(ms){
var dfd = $.Deferred();
setTimeout(function(){
dfd.resolve();
}, ms);
return dfd.promise();
}
现在,让我们链接我们的对象。我假设你在数组中引用了它们:
var elements = [el1,el2,el3]; // elements is an array of elements, you can convert
// that representation you have now with a loop.
var result = delay(0); // initial value
elements.forEach(function(el){
result = result.then(function(){ // when our current delay expires
alert("Hello"); // element available here as `el`
return delay(1000); // next, wait 1000 ms
});
});
result.then(function(){
// in here, everything is resolved.
});
答案 1 :(得分:0)
var index = 0,
timer = 1000;
setinterval(function () {
alert (index)
index++;
}, timer);
这可能会帮助您每1秒调用一次函数,但如果您想更改时间,则需要清除setinterval并传入新的计时器,