2016-07-05 7 views
0

サービスワーカーの助けを借りて、サーバーへの接続がない場合はキャッシュからの応答を返したいと思います。次に、キャッシュに正しい応答がない場合、カスタム応答を返すようにします。サーバへの接続がない場合のキャッシュからの返信

今のところ、私はこのコードを持っている:

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

は、私はこのような何かがしたい:

this.addEventListener('fetch', function (event) { 
    event.respondWith(
     timeout(5000, fetch(event.request)).catch(function() { 
      caches.match(event.request).then(function(cacheResponse) { 
       return cacheResponse; 
      }).catch(function() { 
       return new Response('No cache found'); 
      }) 
     }) 
    ); 
}); 

またはより良いが

this.addEventListener('fetch', function (event) { 
    event.respondWith(
     timeout(5000, fetch(event.request)).catch(function() { 
      caches.match(event.request).then(function(cacheResponse) { 
       return cacheResponse; 
      }).catch(function() { 
       return caches.match(offlineMessageUrl); 
      }) 
     }) 
    ); 
}); 

だろうが、そうではありませんワーキング。

+0

plunker/jsfiddle/codepen?一緒に置く? – SoluableNonagon

+0

サービス就労者をどのように育てることができますか? – dandavis

+0

私はあなたのサービスワーカーを別のjsfiddleに入れることでできると思います。例えば。 https://jsfiddle.net/zalun/d10vsucu/とhttps://jsfiddle.net/zalun/d80qawf9/。 – Marco

答えて

0

Cache.match関数のドキュメントから、約束は常に解決されます。 Responseオブジェクトで解決されます。一致しない場合はundefinedで解決されます。あなたはこれを試すことができます: -

this.addEventListener('fetch', function (event) { 
     event.respondWith(
      caches.match(event.request).then(function(cacheResponse) { 
       return cacheResponse || new Response('No cache found'); 
      }).catch(function() { 
       return new Response('No cache found'); 
      }) 
     ); 
    }); 
関連する問題