PWA服务工作者与特定缓存计时问题匹配

时间:2018-02-10 13:12:26

标签: progressive-web-apps

对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;在继续之前会等待回复。

1 个答案:

答案 0 :(得分:1)

好吧,看来这是一个错过回归的简单案例!

这一行:

  

cache.match(event.request,{'ignoreSearch':true})。then(function   (resp){

应该是

  

返回cache.match(event.request,{'ignoreSearch':true   })。then(function(resp){