2017-12-30 45 views
0

Ich habe eine Web-App, die auch offline arbeiten sollte. Dafür benutze ich JavaScript-Servicemitarbeiter, um notwendige Dateien in den Cache zu stellen. Wenn die Verbindung besteht, werden alle Ressourcen aus dem Netzwerk geladen. Wenn keine Verbindung besteht, werden die Ressourcen aus dem Cache geladen. Das funktioniert gut.Javascript Service Worker verwenden Cache nach Netzwerk-Timeout

Nun ist das Problem, wenn eine Internetverbindung auf dem Gerät, aber der Server ist nicht verfügbar. Dann fällt es nie in den Cache zurück, weil es eine Internetverbindung hat.

Hier ist mein Code für das Ereignis holt in dem Service-worker.js:

self.addEventListener('fetch', function(event) { 
    event.respondWith(
     fetch(event.request).catch(function() { 
      return caches.match(event.request); 
     }) 
    ); 
}); 

Meine Idee ist es, eine Art von Timeout zu implementieren, wenn die Anwendung kann nicht den Inhalt erhält in 30 Sekunden sagen kann dann Benutze immer den Cache. Hat jemand eine Idee, wie man das umsetzt? Ich bin nicht so fit mit Versprechen ...

Antwort

1

Ich vermute Ihr Problem ist, dass Sie nicht eine Instanz des Caches öffnen und dann die Anfrage mit diesem Cache übereinstimmen. Sie verwenden die Caches-API falsch.

Sie brauchen so etwas wie:.

Rückkehr caches.open ('my-Cache-name') dann ...

ich sehr empfehlen Sie durch diese zu lesen: https://serviceworke.rs/strategy-network-or-cache.html

Es gibt viele verschiedene SW-Strategien auf der gleichen Website!

+0

Danke für den Link! das klingt vielversprechend, ich werde es im nächsten Jahr testen;) – Alphacoder