Намеренная блокировка Javascript до наступления события

Я хочу создать интерфейс, который имитирует интерактивную консоль javascript, где пользователи могут печатать ввод непосредственно на самой странице. Проблема связана с вводом: когда пользователь запрашивает ввод, JS необходимо приостановить выполнение до тех пор, пока не будет нажата кнопка «Ввод», чтобы ввод можно было собрать и отправить для продолжения.

Цель состоит в том, чтобы научить очень простому javascript, как можно было бы научить, скажем, Python, где функция input() блокирует дальнейшее выполнение. Я знаю, что это достижимо с обратными вызовами в JS, но я пытаюсь сделать это как можно более удобным для начинающих.

Возможно ли это с помощью Javascript? Я также знаю, что здесь сработает prompt(), но я хочу посмотреть, есть ли более визуально привлекательный способ сделать это.

Вот код, который у меня есть, на случай, если он даст лучшее представление о том, что я пытаюсь сделать:

let $go;
const $input = document.querySelector('input');
const $button = document.querySelector('button');
const $output = document.querySelector('code');

function block() {
  if (!$go) {
    console.log('continuing blocking');
    setTimeout(block, 1000);
  }
}

function output(msg) {
  $output.innerHTML += msg;
}

function input(msg) {
  console.log('waiting for input');
  $input.placeholder = msg;
  $go = false;

  block();

  console.log('returning');
  return $input.value;
}

$button.addEventListener('click', function(){
  $go = true;

  console.log('clicked')
});

person tic    schedule 28.11.2017    source источник
comment
Это действительно помогает, не уверен, почему это не появилось в моем поиске. Думаю, тогда ответ довольно прост. :( Спасибо!   -  person tic    schedule 28.11.2017
comment
Без проблем! - Мне жаль, что вы не получили желаемого ответа.   -  person evolutionxbox    schedule 28.11.2017
comment
Зачем вам блокировать? Что вы пытаетесь заблокировать?   -  person Dave Newton    schedule 28.11.2017
comment
@DaveNewton Я хочу иметь возможность запрашивать у пользователя ввод синхронно через интерфейс HTML, но это не представляется возможным.   -  person tic    schedule 29.11.2017
comment
Я пытаюсь понять, что вы имеете в виду под синхронностью. Какое поведение вы пытаетесь подавить?   -  person Dave Newton    schedule 29.11.2017
comment
@DaveNewton извините за поздние ответы - я все время забываю обновлять страницу (SE напоминает мне по электронной почте на следующий день). Я хочу реализовать строку кода, которая действует как ожидание, пока не произойдет это событие, или ожидание, пока этот флаг не станет истинным, без использования обратных вызовов для кода, который необходимо отложить. Дайте мне знать, если я не понимаю.   -  person tic    schedule 30.11.2017