lel*_*ood 5 javascript google-chrome service-worker progressive-web-apps
我已经正确安装了ServiceWorker,并且正在使用以下代码监听sync事件:
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");
});
});
}
});
Run Code Online (Sandbox Code Playgroud)
而且我可以使用以下代码从新闻稿页面正确触发同步事件:
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");
}
Run Code Online (Sandbox Code Playgroud)
所以在控制台上,我得到了:
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
Run Code Online (Sandbox Code Playgroud)
然后,进行调试,我发现该服务没有输入event.waitUntil到serviceworker中,而是直接在文件末尾进行。
我究竟做错了什么?
多次尝试清空缓存,重新启动,重新加载,硬重载。
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");
}));
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |