Nested setTimeout alternative?

javascript

Solution

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);
}

Problem

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.).

Original source