Задержка JavaScript между функциями с помощью setTimeout (функция, задержка)

Я хочу, чтобы моя программа выполнялась с задержкой между каждым исполнением. Теперь у меня есть следующее:

function function0() {
 setTimeout(function1, 3000);
 setTimeout(function2, 3000);
 setTimeout(function0, 3000);
}

Между каждым исполнением функции0 существует задержка, но не между функциями 1 и funtion2, функция2 запускается сразу после функции1. Как я могу это решить?

4 ответа

Это не изящно, но оно должно работать. В конце функции 2 функция 1 будет выполняться примерно через 3 секунды, то же самое между функцией 1 и функцией цикла.

function function0() {
 setTimeout(function() {
 // <my_function2>

 setTimeout(function() {
 // <my_function1>

 setTimeout(function0, 3000);
 }, 3000);
 }, 3000);
}
</my_function1></my_function2>


setTimeout не блокируется, поэтому все три из этих функций будут работать через 3 секунды. Меняя это на что-то вроде этого:

function function0() {
 setTimeout(function1, 3000);
 setTimeout(function2, 6000);
 setTimeout(function0, 9000);
}

Вызовите каждого из них на 3 секунды. Если вы не хотите жестко указывать это, вы можете использовать setInterval, увеличивать имя функции (поскольку ваши функции имеют номера, чтобы различать их), а затем останавливать после x количество итераций:

var i = 0,
int = setInterval(function () {
 // Function logic
 i++;
 if (i === 3) {
 clearInterval(int);
 }
}, 1000);


Или вы можете сделать это:

function function0() {
 setTimeout(function1, 3000);
}
function function1() {
 /*
 Your code here
 */
 setTimeout(function2, 3000);
}
function function2() {
 /*
 Your code here
 */
 setTimeout(function3, 3000);
}
function function3() {
 /*
 Your code here
 */
}


Все функции выполняются через 3 секунды. Вы хотели сделать это:

function function0() {
 setTimeout(function1, 3000);
 setTimeout(function2, 6000);
 setTimeout(function0, 9000);
}

licensed under cc by-sa 3.0 with attribution.