Как отправить запрос на сервер каждую минуту в сервис-работнике? - PullRequest
0 голосов
/ 06 января 2020

Пробовал через periodSyn c, но это не работает:

TypeError: Cannot read property 'register' of undefined

И в этой документации говорится, что periodSyn c нигде не поддерживается:

https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/periodicSync

Возможно ли это реализовать?:

self.addEventListener('activate', event => {
   while (true) {
     //timer 1 min
     //POST query
}
});

И чтобы при повторном открытии браузера запросы продолжались?

1 Ответ

0 голосов
/ 06 января 2020
TypeError: Cannot read property 'register' of undefined

Эта ошибка не связана с periodSyn c, она связана с регистрацией Service Worker.

Так что более систематический c подход, который является кросс-браузерным, будет использовать API выборки https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

Для этого

 self.addEventListener('THE_EVENT_TO_BE_USED', event => {
    setInterval(function() {
        try {
            const url = 'https://randomuser.me/api';
            // The data we are going to send in our request
            let data = {
                name: 'Sara'
            }
            // The parameters we are gonna pass to the fetch function
            let fetchData = {
                method: 'POST',
                body: data,
                headers: new Headers()
            }
            const registration = await navigator.serviceWorker.ready;
            registration.backgroundFetch.fetch(url, fetchData).then(function(data) {
                // Handle response you get from the server
            }).catch(function(error) {
                // If there is any error you will catch them here
            });
        } catch (err) {
            console.error(err);
        }
    }, 60000);
});
...