Я согласен с другими авторами, занятый сон - это просто плохая идея.
Однако setTimeout не приостанавливает выполнение, он выполняет следующую строку функции сразу после истечения времени ожидания SET, а не после истечения времени ожидания, поэтому не выполняет ту же задачу, что и спящий режим.
Способ сделать это - разбить вашу функцию на части до и после.
function doStuff()
{
//do some things
setTimeout(continueExecution, 10000) //wait ten seconds before continuing
}
function continueExecution()
{
//finish doing things after the pause
}
Убедитесь, что имена ваших функций по-прежнему точно описывают то, что делает каждый фрагмент (т.е. GatherInputThenWait и CheckInput, а не funcPart1 и funcPart2)
Редактировать
Этот метод позволяет не выполнять выбранные вами строки кода до истечения времени ожидания, в то же время возвращая управление обратно на клиентский ПК, чтобы выполнить все остальное, находящееся в очереди.
Дальнейшее редактирование
Как указано в комментариях, это абсолютно НЕ РАБОТАЕТ в цикле. Вы могли бы сделать какой-нибудь причудливый (уродливый) взлом, чтобы заставить его работать в цикле, но в целом это просто приведет к катастрофическому спагетти-коду.