Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.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 ServiceWorker获取完成事件_Javascript_Fetch_Service Worker - Fatal编程技术网

Javascript ServiceWorker获取完成事件

Javascript ServiceWorker获取完成事件,javascript,fetch,service-worker,Javascript,Fetch,Service Worker,因此,我使用serviceWorker-来检查cookie结束前的时间。Cookie过期时间根据请求设置为60分钟 我在serviceWorker上构建了两个版本的获取侦听器 此版本重置客户端上的时间计数器(通过通道.postMessage向其发送消息),但它会根据请求(而不是响应后)发送触发器 self.addEventListener(“获取”,事件=>{ channel.postMessage(true); }); 第二个版本创建新的fetch调用,获取响应,触发客户端,然后返回响应 s

因此,我使用serviceWorker-来检查cookie结束前的时间。Cookie过期时间根据请求设置为60分钟

我在serviceWorker上构建了两个版本的获取侦听器

此版本重置客户端上的时间计数器(通过
通道.postMessage
向其发送消息),但它会根据请求(而不是响应后)发送触发器

self.addEventListener(“获取”,事件=>{
channel.postMessage(true);
});
第二个版本创建新的fetch调用,获取响应,触发客户端,然后返回响应

self.addEventListener(“获取”,事件=>{
event.respondWith((异步()=>{
const response=等待获取(event.request);
channel.postMessage(true);
返回响应;
})());
});
在这种情况下,第二个选项在时间上更准确。但如果查看开发人员工具中的“网络”选项卡,则会创建重复的网络请求


在某种程度上,是否有可能让fetch完成它的事情,让它完成,并在不创建新的fetch调用的情况下获得响应?我对任何类型的用于缓存的serviceWorker都不感兴趣(示例中的fetch事件的100%用例都用于缓存…)

虽然Chrome的DevTools网络面板可能有点混乱,但在这种情况下只进行了一次网络调用。详细解释了您看到的内容

如果在
fetch
处理程序中唯一要做的事情是调用
channel.postMessage()
,那么我建议不要调用
event.respondWith()
。如果在第一个处理程序之后注册了另一个
fetch
处理程序,则该处理程序将有自己的响应机会。如果没有
fetch
处理程序调用
event.respondWith()
,则从网络角度来看,它实际上是一个不可操作的操作

self.addEventListener('fetch', (event) => {
  // Optional: you might want to check for some criteria
  // before calling channel.postMessage().
  if (event.request.url === '...') {
    channel.postMessage(true);
  }
});

虽然Chrome的DevTools网络面板可能有点混乱,但在这个场景中只进行了一次网络调用。详细解释了您看到的内容

如果在
fetch
处理程序中唯一要做的事情是调用
channel.postMessage()
,那么我建议不要调用
event.respondWith()
。如果在第一个处理程序之后注册了另一个
fetch
处理程序,则该处理程序将有自己的响应机会。如果没有
fetch
处理程序调用
event.respondWith()
,则从网络角度来看,它实际上是一个不可操作的操作

self.addEventListener('fetch', (event) => {
  // Optional: you might want to check for some criteria
  // before calling channel.postMessage().
  if (event.request.url === '...') {
    channel.postMessage(true);
  }
});