Грамотный setTimeout
Добрый день. Есть функция которая берет данные и пушит их в массив, потом уже эти данные обновляются раз в минуту от клиента. Выглядит это так:
getData ();
function getData (){
$.getJSON( 'index', function(data) {
createData(data);
})
}
function createData(data){
var inputdata = [];
for (i = 0; i < data.length; i++){
var arr = [+data[i].time, +data[i].sum];
inputdata.push(arr);
}
createTrend(inputdata);
}
function createTrend(inputdata){
//работаем с этими данными, добавление новых данных
setTimeout(function() {
createTrend(inputdata);
}, 60000);
}
Сам вопрос: Нужно так же запускать функцию createTrend но с пустым массивом, как это сделать? Я переделывал так:
getData (false); //допустим надо обнулить данные уже работающей функции
function getData (reload){
$.getJSON( 'index', function(data) {
createData(data, reload);
})
}
function createData(data, reload){
var inputdata = [];
if(reload){ //если функция запущенна после загрузки страницы пушим данные
for (i = 0; i < data.length; i++){
var arr = [+data[i].time, +data[i].sum];
inputdata.push(arr);
}
}else{ // если функция запущенна уже вручную стираем данные
inputdata.length = 0;
}
createTrend(inputdata);
}
function createTrend(inputdata){
if (createTrend.id !== undefined ) {
clearTimeout(getData.id);
};
//работаем с этими данными, добавление новых данных
createTrend.id = setTimeout(function() {
createTrend(inputdata);
}, 60000);
}
После исправления в первый раз массив очищается, а уже потом откуда то достается старый массив. Я так понимаю убивается clearTimeout новой функции, а не старой. Как убить setTimeout у старой функции чтоб оно не обновлялось, а старый массив стерся? Для большего пояснения нужно, чтобы клиент открыв страницу получил данные из базы в массив, и массив обновлялся раз в минуту (это сделано). Теперь надо добавить возможность обнуления этого массива чтобы функция createTrend обрабатывала пустой массив, и эта же функция createTrend запущенная до этого прекратила свою работу. :blink: |
юю
|
Вынес массив за пределы функции, вроде все работает, но это не хорошо :blink:
var inputdata = [];
getData (false); //допустим надо обнулить данные уже работающей функции
function getData (reload){
$.getJSON( 'index', function(data) {
createData(data, reload);
})
}
function createData(data, reload){
if(reload){ //если функция запущенна после загрузки страницы пушим данные
for (i = 0; i < data.length; i++){
var arr = [+data[i].time, +data[i].sum];
inputdata.push(arr);
}
}else{ // если функция запущенна уже вручную стираем данные
inputdata.length = 0;
}
createTrend();
}
function createTrend(){
if (createTrend.id !== undefined ) {
clearTimeout(getData.id);
};
//работаем с этими данными, добавление новых данных
createTrend.id = setTimeout(function() {
createTrend();
}, 60000);
}
|
используй в createTrend setInterval вместо setTimeout
и тело ф-ции туда помести и при вызове createTrend делай возврат setInterval и при вызове createData обнуляй текущий интервал схематично, как-то так
var inputdata = [];
getData(false); //допустим надо обнулить данные уже работающей функции
var currentInterval = null
function getData(reload) {
createData(data, reload);
}
function createData(data, reload) {
clearInterval(currentInterval)
currentInterval = createTrend();
}
function createTrend() {
return setInterval(function () {
//body function
}, 60000);
}
|
SuperZen,
Спасибо, суть понятна :thanks: |
| Часовой пояс GMT +3, время: 02:48. |