setInterval для суммы случайной величины - PullRequest
3 голосов
/ 23 января 2020

Я пытаюсь создать простой код JS, который позволяет мне суммировать случайное количество в сумму. Всякий раз, когда эта сумма достигает 60000, она останавливается.

Это мой код:

let tickets = 35000;


setInterval(function(){
  console.log(tickets);
  const random = Math.floor(Math.random()*(350-100+1)+100);
  let sum = tickets + random;
  let totalSum = sum + random;

  console.log('Total sum =' + totalSum);

  if (tickets >= 60000) {
    console.log("Sold out");
    clearInterval();
  }
}, 1000);

Я пытаюсь выяснить, как правильно суммировать, вызывать каждый раз сумму 35000 + случайное число, но не увеличить, просто замените предыдущее случайное число. Может кто-нибудь подсказать как это исправить?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 23 января 2020

Вам необходимо сохранить intervalID из setInterval и использовать его для остановки интервала с clearInterval.

As Ну, вы также должны обновить tickets. Непонятно, почему вы берете локальную переменную для sum и totalSum.

let tickets = 35000,
    intervalID = setInterval(function() { // assign intervalID
        const random = Math.floor(Math.random() * (350 - 100 + 1) + 100);
        tickets += random;
        console.log(tickets);

        if (tickets >= 60000) {
            console.log("Sold out");
            clearInterval(intervalID); // use intervalID here
        }
    }, 1000);
2 голосов
/ 23 января 2020

Потому что вам нужно снова и снова устанавливать переменную tickets. А также поставить проверку 60000 значения перед обновлением стоимости билетов. Также сохраните setInterval id в переменной, которую вы позже будете использовать в clearInterval.

let tickets = 35000;


let interval = setInterval(function(){
  console.log(tickets);
  if (tickets >= 60000) {
    console.log("Sold out");
    clearInterval(interval);
  }
  const random = Math.floor(Math.random()*(350-100+1)+100);
  tickets += random;
}, 1000);
1 голос
/ 23 января 2020

Полагаю, вы не хотите, чтобы билеты росли после того, как мы распроданы, поэтому укажите это в выражении else.

var tickets = 35000;

var sell = setInterval(function() {
  console.log(tickets);
  if (tickets >= 60000) {
    console.log("Sold out");
    clearInterval(sell);
  }
  else {
    tickets += rando(100, 350);
  }
}, 1000);
<script src="https://randojs.com/1.0.0.js"></script>

Если вы хотите вернуться туда, где остановились при refre sh, сохраните значение tickets в localStorage (и извлекайте его оттуда при необходимости) следующим образом:

<script src="https://randojs.com/1.0.0.js"></script>
<script>
  var tickets;
  var sell = setInterval(function() {
    tickets = Number(window.localStorage.getItem("tickets") || 35000);
    console.log(tickets);
    if (tickets >= 60000) {
      console.log("Sold out");
      clearInterval(sell);
    }
    else {
      window.localStorage.setItem("tickets", tickets + rando(100, 350));
    }
  }, 1000);
</script>

Весь этот код использует rando. js, чтобы упростить случайность и сделать ее более читабельной. Не стесняйтесь заходить на сайт, если хотите, но на самом деле, если вы хотите использовать этот код, просто убедитесь, что в заголовке вашего документа html указано следующее, и вы будете в состоянии go:

<script src="https://randojs.com/1.0.0.js"></script>
...