后台同步不会自动触发

时间:2019-01-28 16:04:11

标签: angular service-worker progressive-web-apps background-sync

好吧,所以我试图制作一个使用背景同步的Angular 7 PWA。

我可以从Chromium的开发工具中触发同步事件,但是当我拔出以太网电缆并将其重新插入时,它不会触发。

我本来以为这是我的服务人员文件很奇怪,所以我添加了以下内容:https://stackoverflow.com/a/50414028/9978023,很奇怪的是它可以在Firefox中运行,但不适用于Chromium。因此,使用此命令,我可以触发同步事件要调用的功能。但这不是一个很好的解决方案。

self.addEventListener('sync', function (event) {
  console.log('I heard a sync event. Sending Posts to server', event);
  event.waitUntil(sendPostsToServer()
    .then(res => {
      console.log(res);
    })
    .catch(e=>{console.log(e)}));
});


async function sendPostsToServer() {
  // POST to server
}

service-worker.js

我在做什么错?当我重新连接到Internet时,为什么不触发同步事件?

1 个答案:

答案 0 :(得分:1)

我知道发生了什么事。我必须手动告诉Service Worker在同步事件恢复在线时使用以下方法触发该事件:

<div class="table-responsive">
    <table class="table table-bordered table-striped text-primary" id="get-warehouse-dt-listing-table">
        <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Location</th>
            <th>Level count</th>
            <th>Created At</th>
            <th>Updated At</th>
            <th></th>
            <th></th>
        </tr>
        </thead>
    </table>

</div>

有了这个(我在POST不成功时运行),当我们重新联机时,SW将运行以触发同步事件。

P.S。这只会触发一次事件:

如果您在运行上面的代码后返回在线,则将触发,但是如果您先返回然后再返回,则不会再次触发。因此,您需要每次运行此代码,以使后台同步正常工作。