event.waitUntil在服务工作者中做了什么以及为什么需要它?

时间:2016-06-18 23:07:58

标签: javascript-events promise service-worker

MDN建议您执行以下操作来创建和填充服务工作缓存:

this.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open('v1').then(function(cache) {
      return cache.addAll([
        '/sw-test/',
        '/sw-test/index.html',
        ... etc ...
      ]);
    })
  );
});

我不明白那段代码。 waitUntil方法也被记录在案,似乎上面的代码是它目前存在的唯一目的:

  

ExtendableEvent.waitUntil()方法延长了生命周期   事件。在与安装事件关联的EventHandler中调用时,   它会延迟处理已安装的安装工人,直到通过   承诺成功解决。这主要用于确保a   直到所有核心都不会考虑安装服务工作者   它取决于填充的缓存。

我不明白的是:

  • waitUntil通常如何影响代码流?是否会阻止事件传播直到它的承诺结算?
  • 为什么在打开工作缓存的环境中需要它?

我问这个问题,因为我上面的代码有问题,我想理解它。

1 个答案:

答案 0 :(得分:32)

正如描述所说,the ExtendableEvent.waitUntil() method extends the lifetime of the event。如果您不在方法中调用它,则可以随时停止服务工作者(请参阅the specification)。

因此,waitUntil方法用于告知浏览器在传递给waitUntil的承诺被解决或拒绝之前不要终止服务工作者。

关于您的具体问题:

  • 对于installactivate事件,它会将服务工作者的状态切换延迟到installedactivated(请参阅specification of the waitUntil method },特别是段落的最后一部分。)
  • 我认为我的其余部分已经回答了为什么需要它。