0

我有以下次要应用程序:

(角度 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!")
        );
      }
    }

那么,这里发生了什么:

  1. 如果有服务人员可用,并且我能够读取一个,我会将数据保存到 IndexedDb 数据库。
  2. 之后,我调用
    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

4

0 回答 0