【问题标题】:Background Sync not triggering automatically后台同步不会自动触发
【发布时间】:2019-01-28 16:04:11
【问题描述】:

好的,所以我正在尝试制作一个使用后台同步的 Angular 7 PWA。

我可以在 Chromium 的开发工具中触发同步事件,但是当我移除以太网电缆并将其重新插入时它不会触发。

我原本以为我的 service worker 文件很奇怪,所以我添加了这个:https://stackoverflow.com/a/50414028/9978023,奇怪的是它在 Firefox 中有效,但在 Chromium 中无效。所以使用它我可以触发同步事件要调用的相同函数。但这不是一个很好的解决方案。

self.addEventListener('sync', function (event) {
  console.log('I heard a sync event. Sending Posts to server', event);
  event.waitUntil(sendPostsToServer()
    .then(res => {
      console.log(res);
    })
    .catch(e=>{console.log(e)}));
});


async function sendPostsToServer() {
  // POST to server
}

service-worker.js

我做错了什么?为什么我重新连接到 Internet 时没有触发同步事件?

【问题讨论】:

    标签: angular service-worker progressive-web-apps background-sync


    【解决方案1】:

    我知道发生了什么。我必须手动告诉 Service Worker 在重新联机时触发同步事件:

    navigator.serviceWorker.ready.then(function (swRegistration) {
         return swRegistration.sync.register('myFirstSync');
    });
    

    有了这个(我在 POST 不成功时运行),当我们重新上线时,SW 将运行触发同步事件。

    附:这只会触发一次事件:

    如果你在运行上面的代码后重新上线,它会触发,但如果你之后又重新上线,它就不会再次触发。因此,需要每次运行此代码,以便后台同步正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多