Мое событие синхронизации не сработало, я использую chrome webserver для обслуживания страницы на моем настольном ПК на localhost: 5000 и использую api для извлечения данных POST на локальный сервер разработкина отдельном порту localhost: 1337 .Выключил мой Wi-Fi, веб-сервер Chrome, а также автономный переключатель в Chrome Devtool, но все еще не запускаю мое событие.
Это мой код из фрагмента serviceworker.js для синхронизации
self.addEventListener('sync', function(event) {
if (event.tag == 'syncrhronizeOfflineData')
{
event.waitUntil(syncrhronizeData());
}
});
async function syncrhronizeData() {
console.log('now synchronizing data...');
//first get all favourites in the localDB and post them to server
const favData = await window.localforage.getItem('restaurants')
.filter((r) => r.isoffline );
console.log('favdata', favData);
}
На самом деле еще не опубликовано в базе данных, пытаясь утешить favdata , но не получая сообщение, событие не было инициировано.
Фрагментв main.js, где я регистрирую serviceworker
/** * Service worker functions below */
registerServiceWorker = () => {
if (!navigator.serviceWorker) return;
navigator.serviceWorker.register('/service-worker.js')
.then((reg) => {
if (!navigator.serviceWorker.controller) return;
if (reg.waiting) {
updateWorker(reg.waiting);
return;
}
if (reg.installing) {
trackInstalling(reg.installing);
return;
}
reg.addEventListener('updatefound', () => {
trackInstalling(reg.installing);
});
}).catch(function(err) {
console.error(err); // the Service Worker didn't install correctly
});
//background sync for favourites and reviews offline posting
if ('SyncManager' in window || 'sync' in reg) {
navigator.serviceWorker.ready.then(function(swRegistration) {
console.log('[ServiceWorker] is ready - sync is registered');
return swRegistration.sync.register('syncrhronizeOfflineData');
});
}
};
Получаю консольное сообщение о том, что ' [ServiceWorker] готово - синхронизация зарегистрирована ', но не получает сообщение отсинхронизировать событие после того, как я опубликовал данные в автономном режиме и снова подключиться.