2016-06-22 3 views
-1

Я пытаюсь создать граф области стека из значений, которые я получаю из api. Мой первый api дает мне ряд дат. Например: 1 июня - 7 июня. Мой второй api дает мне значения, необходимые для графика. Данные выглядят так:Как вызвать api снова после интервала очистки

Моя идея - вызвать api и нажимать значения счетчиков для функции каждый раз для функции. Но почему-то я не мог сделать это возможным, поэтому я вызываю api один раз на каждые 100 мс и захватываю все данные и запуская график. Теперь, когда я хочу вызвать второй api после завершения одной итерации, вызов прерывает график. Пожалуйста, помогите мне исправить это.

d3.json('/service/dates', function(error, dates) { 
    var dran = dates; 
    if (dates != null) { 
     sDt = new Date(dates.st); 
     eDt = new Date(dates.et); 
     var i = 0; 
     var start = function() { 
     if (sDt > eDt) { 
      clearInterval(interval); 
      $('.wrapper').trigger('newPoint'); 
      return; 
     } 
     var sDate = sDt.toISOString(); 
     var eDate = new Date(sDt.setMinutes(sDt.getMinutes() + 30)).toISOString(); 

     //Calling the api for graph values 
     d3.json("/service/dat?s=" + sDate + "&e=" + eDate, function(error, results) { 
      if (results != null) { 

      numbers = numbers.push(results.numbers); 
      values = values.push(results.values); 
      } 
     }); 
     i++; 
     } 
     var interval = setInterval(start, 100); 
    } 
    }); 
} 
+0

Вы вызываете 'setInterval', вам нужно также очистить дважды. – 11thdimension

+0

Я имею в виду, что вы вызываете его два раза, второй вызов внутри 'func' никогда не очищается. – 11thdimension

+0

@Haravi Почему вы отредактировали код? Это делает вопрос совершенно бесполезным и оставляет принятый ответ болтающимся без какого-либо смысла. – altocumulus

ответ

1

Поместите весь вызов API в названную функцию. Затем вызовите это из функции start(), чтобы перезапустить все.

function doAPILoop() { 
    d3.json('/service/dates', function(error, dates) { 
    var dran = dates; 
    if (dates != null) { 
     sDt = new Date(dates.st); 
     eDt = new Date(dates.et); 
     var i = 0; 
     var start = function() { 
     if (sDt > eDt) { 
      clearInterval(interval); 
      $('.wrapper').trigger('newPoint'); 
      doAPILoop(); 
      return; 
     } 
     var sDate = sDt.toISOString(); 
     var eDate = new Date(sDt.setMinutes(sDt.getMinutes() + 30)).toISOString(); 

     //Calling the api for graph values 
     d3.json("/service/dat?s=" + sDate + "&e=" + eDate, function(error, results) { 
      if (results != null) { 

      numbers = numbers.concat(results.numbers); 
      values[values.length] = results.values; 
      } 
     }); 
     i++; 
     } 
     var interval = setInterval(start, 10); 
    } 
    }); 
} 

doAPILoop(); 
+0

О каком графике вы говорите? – Barmar

+0

После перезапуска, что происходит с 'num1' и' num2'? Потому что, когда он повторится через 30 минут, он снова проверит их, и если 'num1> num2', он запустит код, который очистит и перезапустит его, и не войдет в код' // do something'. – Barmar

+0

Если 'num1 <= num2', то он должен выполнить код' // make something'. Я не знаю, почему он не работает. – Barmar

Смежные вопросы