对SW和Promises来说还是比较新的(而且我对JS也没那么好!)所以我可能会遗漏一些明显的东西。
用户可以添加和删除不同的部分,并且这些部分包含他们将添加到这些部分的图像,因此我想使用SW来缓存这些图像,但是想要将它们放在部分编号的缓存中,以便删除部分我可以轻松删除该缓存。
经过一些研究和教程后,我在“fetch'事件监听器:
var cacheName = `mycache-${id}`;
event.respondWith(
caches.match(event.request, { 'ignoreSearch': true }).then(function (resp) {
return resp || fetch(event.request).then(function (response) {
return caches.open(cacheName).then(function (cache) {
cache.put(event.request, response.clone());
return response;
})
})
})
);
但很明显,我们正在搜索所有缓存,所以我认为搜索所需的唯一缓存会更有效但是这看起来似乎没有用,似乎它正在点击在它可以响应它在缓存中找到的内容之前获取?
var cacheName = `mycache-${id}`;
event.respondWith(
caches.open(cacheName).then(function (cache) {
console.log("Opened cache");
cache.match(event.request, { 'ignoreSearch': true }).then(function (resp) {
console.log("Tried to find a match");
return resp || fetch(event.request).then(function (response) {
return caches.open(cacheName).then(function (cache) {
cache.put(event.request, response.clone());
return response;
})
})
})
})
);
它将图像放在指定的缓存中,所以我在这里做了一些愚蠢的事情,我明白Promise是异步的,但我的理解是'然后#39;在继续之前会等待回复。
答案 0 :(得分:1)
好吧,看来这是一个错过回归的简单案例!
这一行:
cache.match(event.request,{'ignoreSearch':true})。then(function (resp){
应该是
返回cache.match(event.request,{'ignoreSearch':true })。then(function(resp){