繁体   English   中英

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

[英]How to run function in background with service worker

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM