diff --git a/view-train.js b/view-train.js index 5f6b660..d731767 100644 --- a/view-train.js +++ b/view-train.js @@ -193,22 +193,36 @@ function onTrainData(data) { var refreshStopToken = null function refresh() { - return fetch(`https://scraper.infotren.dcdev.ro/v2/train/${trainNumber}?date=${date.getFullYear().toString()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`) - .then(function (response) { - return response.json() - }) - .then(function (response) { - trainData = response - onTrainData(response) - }) - .then(function () { - if (refreshStopToken != null) { - clearTimeout(refreshStopToken) - } - refreshStopToken = setTimeout(function () { - refresh() - }, 60000) - }) + function reschedule(timeout) { + if (refreshStopToken != null) { + clearTimeout(refreshStopToken) + } + refreshStopToken = setTimeout(function () { + refresh() + }, timeout || 60000) + } + return fetch( + `https://scraper.infotren.dcdev.ro/v2/train/${trainNumber}?date=${date.getFullYear().toString()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`, + { + cache: 'no-store', + }, + ).then(function (response) { + if (!response.ok) { + // Check in 10 seconds if server returned error + reschedule(10000) + return + } + return response.json() + }).then(function (response) { + trainData = response + onTrainData(response) + }).then(function () { + reschedule() + }).catch(function (e) { + // Check in 1 second if network error + reschedule(1000) + throw e + }) } window.addEventListener('unload', function (e) {