Здравствуйте. Есть трудности в организации 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 каждого таска.
Я думаю что данная проблема может также быть и в других фреймворках ибо все они типичные.
Какие есть решения?