我在我的项目中使用工作箱,但问题不是特定于工作箱。
任何人都可以告诉我如何从特定缓存中检索所有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解决方案。请帮忙谢谢
我传递了错误的承诺,以下是工作代码,
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]);
}
}