SetTimeout выполняется несколько раз с одним событием - PullRequest
0 голосов
/ 18 июня 2019

Я использую сокет для извлечения данных из бэкэнда, который используется для рендеринга моей гистограммы chart.js. Цель состоит в том, чтобы задержать время между каждым баром, который отображается на графике. Я использовал setTimeout внутри цикла for для достижения этой цели. Все отлично работает при первом вводе. Но количество баров дублируется при каждом нажатии кнопки отправки. так, например, первые одиночные бары появляются с задержкой. Но во второй раз, если мы введем значение 2, дублирующий столбец появится вместе, и в третий раз введенные 3 столбца появятся, он продолжится следующим образом. Я действительно смущен тем, почему это происходит. Любая помощь высоко ценится

Я попробовал в основном все, что мог, чтобы понять проблему, Async - ждите. отсоединение для цикла с заданным временем ожидания. Кажется, ничто не объясняет, почему это происходит.

Цикл, о котором идет речь

for (let x = 0; x < data.length; x++) {
      console.log("value of x outsite", x);
      setTimeout(() => {

        this.chartArray.data.datasets.forEach((dataset) => {
          dataset.data.push(data[x]);

        });


        this.chartArray.update();

      }, 1000 * (x + 1));

Цель состоит в том, чтобы получить только один бар для каждого значения с задержкой в ​​последующих барах.

...