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上找不到任何相关文档。也许我需要去看看说明书。非常感谢,这正是我想要的。