Вы немного неправильно понимаете setTimeout. Он не задерживает исполнение программы, а сетапит выполнение переданного ему функционала, через определенное количество миллисекунд. При этом программа продолжает исполнение.
Если вы хотите сделать функционал с задержкой, то вам надо рекурсивно вызывать каждую итерацию с setTimeout.