@Coder321

Как найти ошибку?

Есть функция addStat которая должна собирать статитстику в массив curMinute и каждую минуту отправлять ее на запись при этом очищать curMinute. Но что то у меня идет не так, и между срабатыванием функции addStat и количеством переданых в curMinute елементов не равно нулю. И понять почему так происходит я чето не могу. Практически уверен что проблема в каком то пустяке, но все же нужна помощь.
Вот ссылка на jsfiddle : jsfiddle ;
Вот сам код:
const elements = {
    count: document.getElementById('count'),
    finish: document.getElementById('finish'),
    res: document.getElementById('res'),
}
let lastTime = void 0, curMinute = [], count = 0, finish = 0;
let now = new Date().getTime();
let dayAgo = now - 1000 * 60 * 60 * 24;
//цикл для генерации данных за прошлый день
for (dayAgo; dayAgo <= now; dayAgo += 1000) {
    addStat({
        startTime: dayAgo,
        endTime: dayAgo + 10
    })
}
const difference = count - finish;
elements.count.textContent = count;
elements.finish.textContent = finish;
elements.res.textContent = difference;
if (difference) {
    elements.res.style.color = 'red';
}
function addStat(stat) {
    count = count + 1;
    //среднее время между startTime и endTime
    const statTime = new Date((stat.startTime + stat.endTime) / 2);
    //текущее время без секунд
    const curTime = `${statTime.getFullYear()}-${statTime.getMonth()}-${statTime.getDate()} ${statTime.getHours()}:${statTime.getMinutes()}`;
    if (lastTime === void 0) {
        lastTime = curTime;
    }
    //проверка на текущкю минуту
    if (lastTime !== curTime) {
        //пишем статистику, очищаем текущий массив и проставляем в lastTime новое время
        writeStat(curMinute);
        curMinute = [];
        lastTime = curTime;
    }
    //собираем статистику за минуту
    curMinute.push(stat);
}
function writeStat(statArr) {
    finish += statArr.length;
}

<table>
        <tr>
            <td style="width: 75px;">generate</td>
            <td style="width: 75px;">writeStat</td>
            <td style="width: 75px;">difference</td>
        </tr>
        <tr>
            <td id='count' style="width: 75px;"></td>
            <td id='finish' style="width: 75px;"></td>
            <td id='res' style="width: 75px;"></td>
        </tr>
    </table>


Функция addStat обрабатывает и отправляет на запись входящие данные за минуту. Если lastTime равен текущей минуте то пушим в массив, если нет, то отправляем на запись и очищаем массив для новых данных.
Цыкл вначала генерит данные за прошедший день с шагом в секунду.
Грубо говоря, в конечном итоге функция addStat будет вызываться больше 1000 раз в секунду. Все входящие данные нужно разделить по минутам. То есть, каждую минут должна происходить запись.
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Я вот совсем-совсем не понял что делает этот код, т.к. комментариев нет, а названия переменных феерические.
Но ваш difference неплохо коррелирует с текущим временем в системе.

PNVbRAq.png
https://jsfiddle.net/2oydx7v8/8/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы