Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务工作者获取事件:为什么没有无限循环?_Javascript_Service Worker - Fatal编程技术网

Javascript 服务工作者获取事件:为什么没有无限循环?

Javascript 服务工作者获取事件:为什么没有无限循环?,javascript,service-worker,Javascript,Service Worker,这是关于在服务工作者内处理获取事件时的一些行为 在fetch事件处理程序中调用fetch()时,fetch事件似乎不会再次触发。这其实很好,但我仍然想知道为什么没有发生 我看过的代码如下: self.addEventListener('fetch', function(event) { event.respondWith( caches.open('mysite-dynamic').then(function(cache) { return cache.match(eve

这是关于在服务工作者内处理
获取
事件时的一些行为

fetch
事件处理程序中调用
fetch()
时,
fetch
事件似乎不会再次触发。这其实很好,但我仍然想知道为什么没有发生

我看过的代码如下:

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.open('mysite-dynamic').then(function(cache) {
      return cache.match(event.request).then(function (response) {
        return response || fetch(event.request).then(function(response) {
          cache.put(event.request, response.clone());
          return response;
        });
      });
    })
  );
});

我自己也尝试过该代码,调用
fetch()
(就在
|
之后)会执行,但不会再次触发事件处理程序。为什么不呢?另外,请提供一些页面链接来解释这一点。如注释中所述,从服务工作者内部执行
fetch()
(即,当全局对象为
ServiceWorkerGlobalScope
)将永远不会触发
fetch
处理程序

确定此行为的机制来自第5.6节,描述
fetch()
,步骤5:

如果请求的客户端的全局对象是ServiceWorkerGlobalScope对象,则将请求设置为“无”


中还有许多其他场景也描述了service workers模式设置为“无”时的情况,例如作为
importScripts()

的一部分执行网络请求时……因为service workers中的
fetch
就是这样工作的?@Bergi的确,看起来是这样,但我在MDN上找不到任何相关文档。也许我需要去看看说明书。非常感谢,这正是我想要的。