Сервисный работник перечисляет все URL в кеше и передает их в другую функцию - PullRequest
0 голосов
/ 18 ноября 2018

Я использую рабочий ящик в своем проекте, но проблема не связана с рабочим местом.

Может кто-нибудь сказать мне, как получить список всех URL-адресов из определенного кэша и вернуть его в функцию обратного вызова. Я пытаюсь показать пользователям список всех кэшированных URL-адресов и возможность их удаления. Но я не могу заполнить / показать список всех кэшированных 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 должным образом. Пожалуйста помоги Спасибо

1 Ответ

0 голосов
/ 18 ноября 2018

Я передавал неверное обещание, следующий рабочий код,

Нет такого вопроса в stackoverflow или в Интернете, чтобы вывести список всех 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]);
    }
}
...