lavezzi1
@lavezzi1

Как быть с long-polling в SPA?

Здравствуйте. Есть трудности в организации long polling. Задача простая, в таблице есть данные, назовем их items, у каждого item есть какое то состояние или задача, которую нужно проверять и при изменении ее на сервере менять статус в таблице.

checkTask(item) {
        if (!item.active) {
           fetch(`/items/${item.id}/`)
            .then(response => response.json())
            .then((response) => {
              if (!item.active) {
                setTimeout(() => this.checkTask(item), CHECK_INTERVAL);
              } else {
                // Do something here, like toast
                // Clear task
                item.active = true;
              }
            });
        }
      },


Это пример из Vue. Данные метод делает проверку и если item стал акивен на сервере, значит активирует его в нашей таблице и все. Работает идеально. Но есть одна большая проблема. Когда переходишь на другую страницу по роутеру, без перезагрузки страницы, выполнение checkTask продолжается, потому что, насколько я понимаю, нужно чистить setTimeout каждого таска.

Я думаю что данная проблема может также быть и в других фреймворках ибо все они типичные.

Какие есть решения?
  • Вопрос задан
  • 1781 просмотр
Пригласить эксперта
Ответы на вопрос 2
Negwereth
@Negwereth
lvivcss.com.ua
Чистить таймаут.
Ответ написан
@Artem0071
Безработный mr. Junior
да, чистить надо
можно записывать в data() массив таймаутов, а затем сделать в компоненте beforeRouteLeave и там их чистить
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы