service worker 列出缓存中的所有 url 并传递给另一个函数
service worker list all urls in cache and pass to another function
我在我的项目中使用了 workbox,但问题并非特定于 workbox。
谁能告诉我如何从特定缓存中检索所有 url 的列表并将其 return 返回回调函数。
我正在尝试向用户显示所有缓存网址的列表以及删除它们的选项。但我无法 populate/show 列出所有缓存的网址。
我正在做的是:
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 resolve。请帮忙
谢谢
我传递了错误的承诺,下面是工作代码,
在 Whosebug 或网络上没有这样的问题来列出某个缓存的所有 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]);
}
}
async function getCachedUrls(cacheName, cb) {
const urls = (await (await caches.open(cacheName)).keys()).map(i => i.url)
return (cb) ? cb(urls) : urls
}
getCachedUrls('mycache-v1').then((d) => { console.log(d) })
// or
getCachedUrls('mycache-v1', console.log)
我在我的项目中使用了 workbox,但问题并非特定于 workbox。
谁能告诉我如何从特定缓存中检索所有 url 的列表并将其 return 返回回调函数。 我正在尝试向用户显示所有缓存网址的列表以及删除它们的选项。但我无法 populate/show 列出所有缓存的网址。
我正在做的是:
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 resolve。请帮忙 谢谢
我传递了错误的承诺,下面是工作代码,
在 Whosebug 或网络上没有这样的问题来列出某个缓存的所有 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]);
}
}
async function getCachedUrls(cacheName, cb) {
const urls = (await (await caches.open(cacheName)).keys()).map(i => i.url)
return (cb) ? cb(urls) : urls
}
getCachedUrls('mycache-v1').then((d) => { console.log(d) })
// or
getCachedUrls('mycache-v1', console.log)