Проблема в том, что переменная i
становится частью замыкания и, когда функция выполняется, уже равна 100
.
Код, который вы в настоящее время в буквальном смысле создает сотню тайм-аутовссылаясь на ту же переменную (глобальный я).К тому времени, когда все функции будут выполнены, я равняюсь 100, поэтому вы сообщаете 100 как текущий прогресс 100 раз.
Правильная версия должна выглядеть следующим образом:
function run() {
var i = 0;
setTimeout( function updateProgress() {
$("#progressbar").reportprogress(i++);
if (i < 100){
setTimeout(updateProgress, 500);
}
}, 500);
}
Вы можете проверить замыкания часть сада javascript для объяснения и возможных других решений.