我正在尝试扩展google docs解决方案,以便在缓存为空(或已过期)时从服务器获取内容,但是在承诺时间方面遇到了问题。
我的代码如下:
self.addEventListener("fetch", function(event) {
if (event.request.url.indexOf("targetPage") !== -1) {
const cacheName = 'myCacheName';
event.respondWith(
caches.open(cacheName).then(function(cache) {
return cache.match(event.request).then(function(response) {
if(response !== undefined){
for (var pair of response.headers.entries()) {
if(pair[0] === 'date'){
var tokenExpiryDate = Date.parse(pair[1]);
var now = Date.parse(Date());
if(tokenExpiryDate < now){
return response;
}
else{
fetch(event.request).then(function(serverResponse) {
cache.put(event.request, serverResponse.clone());
return serverResponse;
})
}
}
}
}
else {
fetch(event.request).then(function(serverResponse) {
cache.put(event.request, serverResponse.clone()); return serverResponse;
})
};
});
})
);
}
});
结果我得到了错误:
导致网络错误响应:不是 响应已传递给responseWith()。
我怀疑serverResponse
显示一个值是由于调试器被暂停,有时我发现它是undefined
:
来自Google文档的原始代码(对我来说也很好)如下:
self.addEventListener("fetch", function(event) {
if (event.request.url.indexOf("targetPage") !== -1) {
const cacheName = event.request.headers.get("myCache");
event.respondWith(
caches.open(cacheName).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;
})
);
});
})
);
}
});
答案 0 :(得分:0)
因此,通过尽可能接近原始解决方案,我能够使其正常工作:
.removeChild