Ожидание нажатия кнопки в цикле в js

Имеется массив. Данные для заполнения массива должны вводиться по одному в тег input и запоминаться после нажатия кнопки. Я написал код такого формата, но столкнулся с проблемой - цикл не ожидает нажатия кнопки и переходит к следующей итерации. Код:

<!DOCTYPE html>
<html lang="ru">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>
  <div style="text-align: center; font-size: 20px;">
    <p>Введите переменную: </p>
    <input type="text" id="data" style="width: 10%">
    <p>
      <button id="starting">Далее</button>
    </p>
  </div>

  <script>
    function inputData() {
        let data = [];
        for (let i = 0; i < 5; i++) {
            document.querySelector('#starting').onclick = function() {
                //Код
            }
            //Код после нажатия кнопки
            document.querySelector("#data").value = "";
        }
        return data;
    }

    function dataHandler() {
        //Код
    }

    function mainScript() {
        let data = inputData();
        document.querySelector('#data').disabled = true;
        document.querySelector('#starting').disabled = true;
        dataHandler();
    }
    mainScript();
</script>
</body>

</html>

Подскажите наиболее эффективный способ решения данной проблемы. Спасибо.


Ответы (1 шт):

Автор решения: Igor

<!DOCTYPE html>
<html lang="ru">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>
  <div style="text-align: center; font-size: 20px;">
    <p>Введите переменную: </p>
    <input type="text" id="data" style="width: 10%">
    <p>
      <button id="starting">Далее</button>
    </p>
  </div>

  <script>
    async function inputData() {
      return new Promise(function(resolve, reject) {
        const data = [];
        document.querySelector('#starting').onclick = function() {
          data.push(document.querySelector("#data").value);
          document.querySelector("#data").value = "";
          document.querySelector("#data").focus();
          if (data.length >= 5) {
            this.onclick = null;
            resolve(data);
          }
        };
      });
    }

    function dataHandler(data) {
      console.log(JSON.stringify(data));
      //Код
    }

    async function mainScript() {
      const data = await inputData();
      document.querySelector('#data').disabled = true;
      document.querySelector('#starting').disabled = true;
      dataHandler(data);
    }
    mainScript();
  </script>
</body>

</html>

→ Ссылка