Этот шаблон можно немного видоизменить, чтобы он обрабатывался не по завершению процесса, а в ходе его исполнения. Это нам очень поможет при использовании индикатора состояния:
function doSomething (progressFn [, дополнительные аргументы]) {
// Выполняем инициализацию
(function () {
// Делаем вычисления...
if (условие для продолжения) {
// Уведомляем приложение о текущем прогрессе
progressFn(значение, всего);
// Обрабатываем следующий кусок
setTimeout(arguments.callee, 0);
}
})();
}