我有以下次要应用程序:
(角度 13 - 主线程)
home.component.ts
public sendIssueDescription(e) : void {
e.preventDefault();
if('serviceWorker' in navigator && 'SyncManager' in window) {
navigator.serviceWorker.ready
.then((sw:any) => {
let issue = this.getIssue();
this.dbService.saveIssue(issue)
.subscribe(
res => {
console.log("Saving a problem was Ok:" + JSON.stringify(res));
sw.sync.register('sync-new-problem');
},
err => console.log("Error ocurred:", err),
() => console.log("Syncronisation is totally completed")
);
});
}
else {
// A browser do not support a background syncronization, we need to send the data right now
let issue = this.getIssue();
this.problemReportingService.postIssue(issue).subscribe(
res => window.console.log("Post issue Ok"),
err => window.console.log("Post issue error!")
);
}
}
那么,这里发生了什么:
- 如果有服务人员可用,并且我能够读取一个,我会将数据保存到 IndexedDb 数据库。
- 之后,我调用
sw.sync.register('sync-new-problem'); 触发同步事件。
“同步”事件触发,一切正常。
我在服务人员中捕获了一个“同步”事件:
self.addEventListener("sync", function(event) {
console.log('[Service Worker] background synchronization', event);
if(self.indexedDB && event.tag === 'sync-new-problem') {
console.log('[Service Worker] syncing a new Problem');
event.waitUntil(
readAllData('Problems')
.then(function(data) {
for(var dt of data) {
console.log("Data: " + dt);
})
.then(function(res) {
console.log("It's required to clean storage data: " + res);
})
.catch(error => {
console.log("Error ocurred" + error);
throw error;
})
);
}
});
当我注册同步任务时,同步事件会立即触发,一切正常。但是当互联网连接恢复时,这个事件也应该被自动抛出。
我试图关闭和打开我的 Wi-Fi/以太网。我还尝试在 Chrome 开发工具中选择离线。没有任何帮助,网络恢复时不会触发“同步”事件。
根据 Chrome 中的后台同步选项卡,我的同步任务已注册。然后我关闭/打开 Wi-Fi,在 Chrome 开发工具的应用程序选项卡上选中和取消选中离线复选框。没有任何效果,连接恢复时不会触发“同步”事件。
我将非常感谢任何建议,如何在网络恢复时触发“同步”事件。我尝试使用 Chrome v.96