dalv_happy
@dalv_happy

Как реализовать интервальный вывод уведомлений в js?

Добрый день, необходимо через restApi получить массив данных уведомлений, и выводить эти уведомления с определённым интервалом, показали уведомление, оно повисело секунды 3, удалили, на этом месте отобразили другое. Как только все уведомления показали, нужно подключиться к серверу и получить новую порцию уведомлений и так происходит до тех пор пока открыта вкладка в браузере.

Моя реализация:
var displayTime = 3000;
getNotification();

function getNotification() {
    var xhttp = new XMLHttpRequest();
    var requestURL = '/front/api/get-notifications';
    xhttp.open("GET", requestURL, true);
    xhttp.send();
    xhttp.onreadystatechange = function () {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            var apiResponse = xhttp.responseText;
            var configSP = JSON.parse(apiResponse);
            console.log(configSP);
            initSP(configSP, 0);
        }
    };
}

function initSP(configSP, i) {
    if (i >= configSP.notifications.length)
        getNotification();
    var htmlNotif = '<img src="' + configSP.notifications[i].productImg + '" class="photo">';

   //Производим вставку в вёрстку    
    
    setTimeout(function run() {
        closeNotification();//Удаляем из DOM дерева элемент
        initSP(configSP, ++i);
        setTimeout(run, displayTime);
    }, displayTime);
}

Но почему-то на втором получении данных происходят следующие ошибки.
168ac907aead464c8878ab304996ada2.jpg
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Sayonji
Вы забыли кое-что.
if (i >= configSP.notifications.length) {
    getNotification();
    return;
}
Ответ написан
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
Я бы это все через очередь реализовал, честно говоря. Примерно так (псевдокод).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 11:02
5000 руб./за проект
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект