gpt4 book ai didi

javascript - 同步事件中的 ServiceWorker 无法使用 waitUntil

转载 作者:搜寻专家 更新时间:2023-11-01 04:28:56 27 4
gpt4 key购买 nike

我已经正确安装了 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

然后,调试我看到在serviceworker的event.waitUntil里面没有进入,直接走到文件末尾。
我做错了什么?
多次尝试清空缓存、重启、重新加载、硬重新加载。

最佳答案

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");
}));
}
});

关于javascript - 同步事件中的 ServiceWorker 无法使用 waitUntil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47829328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com