ServiceWorker в случае синхронизации не может использовать waitUntil
У меня есть правильная установка ServiceWorker, и я слушаю событие синхронизации с этим кодом:
self.addEventListener("sync", function(event) {
console.log("a sync catched");
if (event.tag === "sync-newsletter") {
console.log("is my sync");
event.waitUntil(() => {
return fetch("http://website.com/otherthings")
.then(function(response) {
console.log("ok, sent");
});
});
}
});
И я правильно запускаю событие синхронизации со страницы информационного бюллетеня с этим кодом:
if ("serviceWorker" in navigator && "SyncManager" in window) {
navigator.serviceWorker.ready.then(function(registration) {
console.log("sw and sync available, sw ready");
registration.sync.register("sync-newsletter").then(console.log("sync registered"));
console.log("ended sync");
});
} else {
console.log("no newsletter for who dont have a sw and sync");
}
Итак, на консоли я получил:
newsletter.js:85 sw and sync available, sw ready
newsletter.js:86 sync registered
newsletter.js:87 ended sync
serviceworker.js:79 a sync catched
serviceworker.js:81 is my sync
Затем, отлаживая я вижу, что не входит в event.waitUntil
в serviceworker, а идет непосредственно в конце файла.
Что я делаю не так?
Много раз пытался очистить кэш, перезапустить, перезагрузить, жестко загрузить.
1 ответ:
waitUntil
ожидается, что будет взят экземпляр Promise, а не функция, которая возвращает Promise.self.addEventListener("sync", function(event) { console.log("a sync catched"); if (event.tag === "sync-newsletter") { console.log("is my sync"); event.waitUntil(fetch("http://website.com/otherthings") .then(function(response) { console.log("ok, sent"); })); } });