Как получить SetInterval () в функции $ .when - PullRequest
0 голосов
/ 03 июля 2019

Это продолжение до этого вопроса .

У меня есть набор функций, которые должны запускаться одна за другой. Первая функция ($.when()) запускается, когда 2 файла JSON анализируются по внешним ссылкам. Тем не менее, я хотел бы анализировать файлы JSON раз в секунду. Вот где я застрял. Вот пример моего кода:

var myJSON;

function _parseJSON() {
  // return here, no need returning exactly what you would expect anyhow
  return $.getJSON(settings.json_src);
}

// because you returned, you can chain everything nicely together
$.when( _parseJSON() )
  // don't forget the argument here
  .then(function( data ) { myJSON = data; })
  // and these will only run after the myJSON got set
  .then( _cacheOptions )
  .then( _cacheDom )
  .then( _events )
  .then( _render );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Я хочу, чтобы _parseJSON() вызывался каждую секунду для получения последних данных. Затем на основании этого будут обновлены функции _cacheOptions и _render.

Я знаю, что должен использовать для этого заданные интервалы, но я не знаю, как это реализовать. Если это возможно, я предпочитаю, чтобы только указанные функции обновлялись каждую секунду. Было бы слишком тяжело обновлять все функции.

Любые предложения будут великолепны. Заранее спасибо.

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете просто написать тот же код обновления внутри блока setInterval и добавить его ниже к своему коду:

// because you returned, you can chain everything nicely together
$.when( _parseJSON() )
  // don't forget the argument here
  .then(function( data ) { myJSON = data; })
  // and these will only run after the myJSON got set
  .then( _cacheOptions )
  .then( _cacheDom )
  .then( _events )
  .then( _render );

var intervalId = setInterval(function(){

  // below will start after a second and hereafter execute every second!

  $.when( _parseJSON() )
    .then(function( data ) { myJSON = data; })
    .then( _cacheOptions )
    .then( _render );

}, 1000)

Позже вы можете отменить эти повторяющиеся казни, когда вам это нужно.

clearInterval(intervalId);

Однако выполнение HTTP-запроса каждую секунду в интернет-среде, как мне кажется, не является правильным способом, который может стать тяжелым бременем для клиентов. 5 или 10 секунд в соответствии с вашими потребностями было бы идеально. Я надеюсь, что это помогает. Ура!

...