var startIndex = 0;
var data = [1, 2, 3];
var timeout = 1000;
function functionToRun(i, length) {
alert(data[i]);
}
(function forWithDelay(i, length, fn, delay) {
setTimeout(function() {
fn(i, length);
i++;
if (i < length) {
forWithDelay(i, length, fn, delay);
}
}, delay);
})(startIndex, data.length, functionToRun, timeout);
Модифицированная версия ответа Даниэля Вассалло с переменными, извлеченными в параметры, чтобы сделать функцию более пригодной для повторного использования:
Сначала давайте определим некоторые существенные переменные:
var startIndex = 0;
var data = [1, 2, 3];
var timeout = 3000;
Далее вы должны определить функцию, которую хотите запустить. Это будет передано i, текущий индекс цикла и длина цикла, в случае, если вам это нужно:
function functionToRun(i, length) {
alert(data[i]);
}
Самоисполняющаяся версия
(function forWithDelay(i, length, fn, delay) {
setTimeout(function () {
fn(i, length);
i++;
if (i < length) {
forWithDelay(i, length, fn, delay);
}
}, delay);
})(startIndex, data.length, functionToRun, timeout);
Функциональная версия
function forWithDelay(i, length, fn, delay) {
setTimeout(function () {
fn(i, length);
i++;
if (i < length) {
forWithDelay(i, length, fn, delay);
}
}, delay);
}
forWithDelay(startIndex, data.length, functionToRun, timeout); // Lets run it