Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
158
rated 0 times [  165] [ 7]  / answers: 1 / hits: 22038  / 11 Years ago, wed, july 10, 2013, 12:00:00

I need to execute 3 functions in a 1 sec delay.



for simplicity those functions are :



console.log('1');
console.log('2');
console.log('3');


I could do this: ( very ugly)



 console.log('1')
setTimeout(function () {
setTimeout(function () {
console.log('2')
setTimeout(function () {
console.log('3')

}, 1000)
}, 1000)

}, 1000)


Or I could create an array of functions and use setInterval with global counter.



Is there any elegant way of doing this ?



(p.s. function no.2 is not dependent on function number 1... hence - every sec execute the next function.).


More From » javascript

 Answers
17

You can use something like this with setTimeout:



var funcs = [func1, func2, func3],
i = 0;

function callFuncs() {
funcs[i++]();
if (i < funcs.length) setTimeout(callFuncs, 1000);
}
setTimeout(callFuncs, 1000); //delay start 1 sec.


or start by just calling callFuncs() directly.



Update



An setInterval approach (be aware of the risk of call stacking):



var funcs = [func1, func2, func3],
i = 0,
timer = setInterval(callFuncs, 1000);

function callFuncs() {
funcs[i++]();
if (i === funcs.length) clearInterval(timer);
}

[#77087] Tuesday, July 9, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
wilson

Total Points: 27
Total Questions: 93
Total Answers: 93

Location: Tajikistan
Member since Sun, Aug 29, 2021
3 Years ago
wilson questions
Tue, Aug 9, 22, 00:00, 2 Years ago
Wed, May 11, 22, 00:00, 2 Years ago
Wed, May 20, 20, 00:00, 4 Years ago
Wed, May 13, 20, 00:00, 4 Years ago
;