#javascript #service-worker #service-worker-events
#javascript #service-worker #service-worker-события
Вопрос:
Есть ли какой-либо способ связать запрос на синхронизацию и следующий последующий запрос на выборку, когда мы вызываем обновление и последующий вызов выборки? В настоящее время я вижу, что вызывается вызов выборки ‘jsonGetMyData’ и возвращает мне старые данные, но если я приостановлю этот вызов в отладчике на секунду, он предоставит мне обновленные данные. Итак, кажется, что обновление service worker не происходит перед вызовом выборки, если это так, как мы можем управлять этим, чтобы сначала произошло обновление service worker, а затем вызывалась только выборка?
Пожалуйста, сообщите.
Ниже приведена вызывающая часть.
if ('serviceWorker' in navigator amp;amp; 'SyncManager' in window) {
navigator.serviceWorker.ready
.then(function(sw) {
writeData('myStore', dataObject)
.then(function() {
return sw.sync.register('case0-sync');
})
.then(function(){
debugger;
this.jsonGetMyData(this.get("dataId"));
})
.catch(function(err) {
console.log(err);
});
});
}
Ниже приведен пример кода service worker.
self.addEventListener("sync", function(event) {
console.log("Background Syncing started...");
if(event.tag === 'case0-sync'){
//my update post call goes here
}else if(event.tag === 'case1-sync'){
}else if(event.tag === 'case2-sync'){
}else if(event.tag === 'case3-sync'){
}else if(event.tag === 'case4-sync'){
}
});
self.addEventListener('fetch', function (event) {
if (event.request.url.indexOf('jsonGetMyData') > -1
event.respondWith(
fetch(event.request).then(function(resp){
return resp;
}).catch(function(err){
})
);
}
});
Комментарии:
1. в конце serviceworker upd — это место для создания нового события «Готово» .. это новое событие можно прослушать… onDone — это место, где вы можете привязать свой код для синхронизации / выборки после обновления
2. насколько я понимаю, после того, как он зарегистрирует ‘case0-sync’, элемент управления перейдет к блоку then для вызова выборки … но в bw у нас есть вызов update в case0-block, который выполняет фактическое обновление данных, и он не будет вызываться мгновенно, когда срабатывает вызов register, и bw это задерживает нашу выборкувызовите выборку и дайте нам старый data….is это правда?
3. просмотрите свои политики «сначала кэш» и «всегда обновлять» в SW
4. хорошо, можете ли вы дать мне пример / структуру этого кода, как это выглядит.
5. о типах кэша (различные политики) из документов workbox: developers.google.com/web/tools/workbox/reference-docs/latest /… .. подробнее о сервисном работнике в целом и жизненном цикле: developers.google.com/web/tools/workbox/reference-docs/latest/… просмотр этих ссылок должен помочь вам решить вашу проблему.. Сетевой первый тип политики гарантирует, что вы не извлекаете данные из устаревшего кэша.