服务工作者列出缓存中的所有URL并传递给另一个函数

问题描述 投票:2回答:1

我在我的项目中使用工作箱,但问题不是特定于工作箱。

任何人都可以告诉我如何从特定缓存中检索所有URL的列表并将其返回到回调函数。我试图向用户显示所有缓存网址的列表以及删除它们的选项。但我无法填充/显示所有缓存网址的列表。

我在做的是:

function queryCache(){
    var url = [];
    caches.open('mycache').then(function (cache){
        cache.keys().then(function(keys){
            return new Promise(function(resolve, reject) {
                keys.forEach(function (request, index, array) {
                    cache.match(request).then(function (response){
                        url.push(response.url);
                    })
                })
                resolve();
            });
        }).then(function(){
            console.log(url); // lists all urls in console as array
            cacheList(url);
        });
    })
}

function cacheList(Items)
{   for(var i = 0; i < Items.length; i++){
        console.log('Items: '+Items[i]); //never reaches
    }
    console.log(Items.length); // always show 0
}

当我从控制台调用queryCache()时,正确调用了cacheList(Items),但问题是,Items总是一个空数组,其长度始终为0。

可能我没有正确使用Promise解决方案。请帮忙谢谢

javascript browser-cache service-worker workbox
1个回答
1
投票

我传递了错误的承诺,以下是工作代码,

stackoverflow或web中没有这样的问题列出某些缓存的所有URL并传递给函数,我希望它能帮助某人。

function queryCache(){
    var url = [];
    caches.open('mycache').then(function (cache){
        cache.keys().then(function(keys){
            return Promise.all(
                    keys.map(function(k){url.push(k.url); return k.url} )
                )
        }).then(function(u){ cacheList(url);})
    })
}

function cacheList(Items)
{   for(var i = 0; i < Items.length; i++){
        console.log('Items: '+Items[i]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.