setTimeout
не останавливается; он просит Javascript запустить какой-то другой код позже.
Поиск в Google по "циклу setTimeout" говорит вам именно то, что вам нужно знать. Если немного осмотреться, в нем даже упоминается setInterval. Разница в том, что использование setTimeout для цикла будет ждать 3 секунды между циклами, тогда как setInterval заставит цикл занять 3 секунды (включая то, сколько времени занимает анимация, если она меньше 3 секунд :)). Кроме того, setInterval создает бесконечный цикл, из которого вам придется разорваться после желаемого количества раз; setTimeout требует, чтобы вы создали цикл самостоятельно.
i = 0;
function animation_loop() {
someAnimation();
setTimeout(function() {
i++;
if (i < n) {
animation_loop();
}
}, 3000);
};
animation_loop();
i = 0;
someAnimation();
setInterval(function() {
i++;
if (i < n) {
someAnimation();
}
}, 3000);