Показать сообщение отдельно
  #15 (permalink)  
Старый 07.09.2021, 08:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,503

uzlprog, второй вариант прост:
<input type="button" id="button" value="add a"/>
<div>Выходной массив: <span  id="out">[]</span></div>
<script>
var a;
var arr = [1, 2, 3, 4, 5];
var outArr = [];
function f(i = 0) {
  if (i == arr.length) i = 0;
  a = arr[i++];
  setTimeout(() => {
    f(i);
  }, 1000);
}
f();

function add() {
  outArr.push(a);
  out.innerHTML = JSON.stringify(outArr);
}

button.onclick = add;
</script>


Первый вариант не будет иметь никакой точности. Потому что время срабатывания таймеров не может быть точным. Ты думаешь что при интервале в 1 секунду обновления а, если спрашивать каждую 9ую секунду получишь 9ое значение а? А вот и нет. Там может быть 8ое или 10ое, а может и 35ое, если ты вкладками щёлкал или запускал что-то с нагрузкой процессора.
Таймер не гарантируют точное время, при установке таймера в N он сработает после N. Когда после - зависит от окружения.

<input type="button" id="button" value="stop"/>
<div>Выходной массив: <span  id="out">[]</span></div>
<script>
var a;
var arr = [1, 2, 3, 4, 5];
var outArr = [];
function f(i = 0) {
  if (i == arr.length) i = 0;
  a = arr[i++];
  setTimeout(() => {
    f(i);
  }, 1000);
}
f();

function add() {
  outArr.push(a);
  out.innerHTML = JSON.stringify(outArr);
}

function fill(t = 9) {
  add();
  fill.timerId = setTimeout(() => {
    fill(t);
  }, t * 1000);
}
fill();

button.onclick = () => clearTimeout(fill.timerId);
</script>
__________________
29375, 35

Последний раз редактировалось Aetae, 07.09.2021 в 08:55.
Ответить с цитированием