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

时间:2017-12-15 09:29:14

标签: javascript google-chrome service-worker progressive-web-apps

我安装了正确的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,直接进入文件的末尾。
我做错了什么?
多次尝试清空缓存,重启,重新加载,硬实现。

1 个答案:

答案 0 :(得分:2)

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