2016-07-22 8 views
1

Mit einem einfachen Service Worker aktualisieren, beim Empfang einer Nachricht, wie unten. Dies funktioniert einwandfrei und der Cache wird aktualisiert. Als nächstes müssen Sie eine der Dateien unzugänglich lassen und versuchen, eine Benachrichtigung zu erhalten, dass eine der Dateien versagt. Wie listet man die Ergebnisse der Anfragen auf?Zugriff auf Cache.addAll() -Auftragarray

Suchen Sie hier [https://developer.mozilla.org/en-US/docs/Web/API/Cache/addAll][1]

Staaten „Die Anforderungsobjekte während der Bergung werden die Schlüssel an die gespeicherten Antwortoperationen geschaffen.“ Wie wird das interpretiert? und in Code zugegriffen?

self.addEventListener('message', event => { 
    console.log('EventListener message ' + event.data); 

event.waitUntil(
    caches.open('minimal_sw').then(cache => { 
     return cache.addAll(fileList).then(function(responseArray){ 
     console.log('EventListener responseArray ' + responseArray); 
     self.skipWaiting(); 
     }); 
    }) 
) 
}); 

Antwort

3

Anfang dieses Jahres war das addAll() Verhalten changed, so dass es, wenn eine der zugrunde liegenden Anfragen ablehnen Antworten zurück, die keinen 2xx Statuscode haben. Dieses neue Verhalten ist in der aktuellen Version aller Browser implementiert, die die Cache-Speicher-API unterstützen.

Wenn Sie also feststellen möchten, wenn eine (oder mehrere) der Anforderungen fehlschlagen, können Sie eine .catch() an das Ende Ihres addAll() Anrufs ketten.

Aber Ihre Frage allgemeiner zu beantworten, wenn Sie ein Array von Strings zu addAll() passieren, sind sie implicitly converted (Abschnitt 6.4.4.4.1) zu Request alle Objekte der von der Request Konstruktor impliziert Standardwerte verwenden.

Diese Request Objekte, die erstellt werden, sind jedoch kurzlebig und werden nirgends für die Verwendung in dem folgenden then() gespeichert. Wenn aus irgendeinem Grund, die Sie wirklich brauchen die eigentliche zugrunde liegende Request Objekt, das verwendet wurde, innerhalb des then() die Netzwerkanforderung zu machen, können Sie explizit eine Reihe von Request Objekte konstruieren und übergeben das zu addAll():

var requests = urls.map(url => new Request(url)); 
caches.open('my-cache').then(cache => { 
    return cache.addAll(requests).then(() => { 
    // At this point, `cache` will be populated with `Response` objects, 
    // and `requests` contains the `Request` objects that were used. 
    }).catch(error => console.error(`Oops! ${error}`)); 
}); 

Of natürlich, wenn Sie ein Cache Objekt und wollen eine Liste der Schlüssel zu bekommen (die den Anforderungs-URLs entsprechen), können Sie, dass an jedem Punkt über die keys() Methode tun:

caches.open('my-cache') 
    .then(cache => cache.keys()) 
    .then(keys => console.log(`All the keys: ${keys}`)); 

Es gibt keine Notwendigkeit zu halten eine Referenz zu den ursprünglichen Request s, die verwendet wurden, um den Cache zu füllen.

+0

Danke für die detaillierte Antwort, räumte viel auf. –