Обновляйте элемент каждые 10 секунд, т. Е., как в 12:30:10, 12:31:10, и т. д

#javascript

Вопрос:

Вопрос: Как обновлять элемент каждые 10 секунд, т. Е., как в 12:30:10, 12:31:10, и т. д

Следующее технически работает и делает то, что мне нужно, но как я должен это сделать правильно? То есть оптимально с точки зрения кода и времени выполнения?

   setInterval(function(){
    var now = new Date();
    if (now.getSeconds() == 10) {
       $('#jama').load('jama.php');
    }
  },1000);
 

Комментарии:

1. Насколько точно вам это нужно? Почему каждую 10-ю секунду? Вы можете получить текущие секунды (например, 48), установить таймер на следующую 10 — ю секунду (70-48 = 22), а затем запустить минутный таймер, который вызовет функцию загрузки.

Ответ №1:

Проблема: я думаю, что вы просите: проверять каждую десятую секунду, т. Е. 12:30:10-это десятая секунда, но проверять каждые десять секунд (12:30:13, 12:30:23, и т.д.) не является.

Решение: В этом случае используйте setTimeout() , запуская его каждую секунду , чтобы найти десятую секунду, и когда вы найдете десятую секунду, тогда точно setInterval() так же, как вы делаете сейчас.

Преимущество: В чем преимущество? Как только вы найдете десятую секунду, вы можете изменить setInterval() задержку с 1000 на 60000 , так как мы знаем, что следующая десятая секунда будет через 60 секунд. Это уменьшает частоту проверки кода, а также удаляет now() объект и ненужную проверку.

Код: Рабочая демонстрация ниже.

 var myinterval = false;

function findTenthSecond() {
  if(!myinterval) {
    findTenthSecond_async();
  }
}

function findTenthSecond_async() {
  setTimeout(function(){
    var now = new Date();
    console.log("Check second: "   now.getSeconds()   "|");
    if (now.getSeconds() == 10) {
      myinterval = true;

          // your code is here
      setInterval(function(){
        console.log ("Load jama.php");
        $('#jama').load('jama.php');
      },60000);  // updated the second count to 60 seconds

    } else {
      findTenthSecond();
    }    
  }, 1000);
}

findTenthSecond(); 

Комментарии:

1. сначала извините за неправильную формулировку моего вопроса, а затем большое спасибо за ответ. Это было именно то, что я искал, а также вы упомянули именно те вещи, из-за которых мое решение казалось неуклюжим

2. @StonieMalony Спасибо! Нет проблем, не стесняйтесь отмечать этот ответ как «правильный» (галочка), если он помог, чтобы он мог помочь другим.