我正在构建一个javascript Web应用程序。在这里,我想将图片和其他数据上传到服务器。这一切正常,但是我也想离线使用该应用程序。因此,我实现了indexedDB,以离线存储数据。此外,我做了一个同步功能,它将每5秒钟执行一次(setIntervall()...),以便在再次连接互联网时将数据同步到服务器。
问题是,此同步功能仅在打开应用程序时有效。因此,我研究了一种解决问题的方法,并想到了一个具有后台同步功能的“服务人员”。
问题是我不知道如何实现。
这是我目前拥有的(整个应用程序都在MVC概念中编程):
if (event.tag == 'myFirstSync') {
event.waitUntil(sync());
}
});
答案 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。