如何与服务人员在后台运行功能

时间:2019-07-01 14:12:10

标签: javascript service-worker

我正在构建一个javascript Web应用程序。在这里,我想将图片和其他数据上传到服务器。这一切正常,但是我也想离线使用该应用程序。因此,我实现了indexedDB,以离线存储数据。此外,我做了一个同步功能,它将每5秒钟执行一次(setIntervall()...),以便在再次连接互联网时将数据同步到服务器。

问题是,此同步功能仅在打开应用程序时有效。因此,我研究了一种解决问题的方法,并想到了一个具有后台同步功能的“服务人员”。

问题是我不知道如何实现。

这是我目前拥有的(整个应用程序都在MVC概念中编程):

  • 我有一个带有以下代码的sw.js:
  if (event.tag == 'myFirstSync') {
    event.waitUntil(sync());
  }
});
  • 控制器中具有用于同步数据的函数sync()

1 个答案:

答案 0 :(得分:0)

您可以在“ {sync}”事件处理程序的sw.js文件中实现后台同步:

self.addEventListener('sync', function(event) {
  if (event.tag == 'myFirstSync') {
    event.waitUntil(() => {
      // Put your sync code here.
    });
  }
});

注册服务工作者后的某个时候,您需要触发同步:

// Register your service worker:
navigator.serviceWorker.register('/sw.js');

// Then later, request a one-off sync:
navigator.serviceWorker.ready.then(function(swRegistration) {
  return swRegistration.sync.register('myFirstSync');
});

一次触发同步后,如果同步失败,则同步应继续自行重试(即使该应用未在浏览器中打开)。

  

如果失败,将安排另一个同步重试。还重试同步   等待连接,然后采用指数补偿。

有关更多详细信息,请参见https://developers.google.com/web/updates/2015/12/background-sync