Для чего-то подобного я определенно пошел бы противоположным путем. Я приму решение о том, как долго должен работать цикл, чтобы достичь окончательного счета. Скажем, я хочу достичь 5 000 000 за 10 секунд. Это 10 000 миллисекунд, и давайте решим, что мы будем повторять каждые 10 миллисекунд. Это дает нам число циклов, равное 1000.
Таким образом, теперь у нас есть 1000 циклов, чтобы достичь 5 миллионов, т.е. добавьте 5000 к каждому циклу.
let counter = 0;
setTimeout(function() {
counter +=5000;
if(counter > interestSaved)
counter = interestSaved;
$scope.interestSavedMillis = counter;
$scope.$digest();
if (counter < interestSaved) {
interestSavedTimeLoop();
}
}, 10); //10 millisecond loop
Очевидно, это сделает счетчиквыглядеть искусственноТаким образом, вы можете заменить значение приращения на значение, которое не является степенью 10. Основная идея состоит в том, чтобы счетчик остановился через определенное время.
Вы также можете добавить коэффициент скорости в уравнение, чтобы 10 миллионови 5 миллионов не заканчиваются одновременно.
Надеюсь, у вас есть идея.