Re: [ServiceWorker] Fetch API respondWith's implicit RETURN (#844)

Sorry registers Program Counter (PC) and Stack Pointer (SP) betray my age and are pretty useless in OO interpretive programming but it was a metaphor.

Here's the code:


'use strict';

console.log("Started", self);

function optimusConor(event)
{   
 console.log(Date(), 'Handling fetch event for', event.request.url);

 const MAXDETENT = 300,
   NOCACHE  = {cache : "no-cache"},
   WORKCACHE   = "FAC$CACHE";
   
 var  timerId  = 0,
   replied     = false;
   
 function reply(result){
  console.log("In reply", replied);
  if (replied) return;
  console.log("After reply", replied);
  
  replied = true;
  event.respondWith(result);
  console.log("Replied : ", replied);
 }

 function wait(ms){
  return new Promise(
   function(resolve){
    timerId = setTimeout(function(){resolve()}, ms);
   });
 }

 var inBuff =
        new Promise(
   function(resolve,reject){    
    caches.match(event.request.clone())
     .then(response => response === undefined ? reject() : resolve(response));
   }
  ).catch(()=>{});

 event.waitUntil(new Promise(
  function(allDone){
   console.log("in promise");
     
   fetch(event.request.clone(), NOCACHE)
    .then(response =>
     {
      console.log('Response from network is:', response);
      if (response.ok) {
       clearTimeout(timerId);
       console.log("Storing cache");
       reply(response);
       caches.open(WORKCACHE).then(cache => {
        cache.put(event.request, response.clone());
       })
      }
      allDone();
     })
    .catch(function(error) {
      console.log('Fetching failed:', error);
      allDone();
      inBuff.then(response => reply(response))
       .catch(() => {console.log("Error3 is: ", error)});
       })
   ;

   wait(MAXDETENT).then(inBuff.then(response => reply(response)));
   
  }));
}

self.addEventListener('install', function(event) {
  self.skipWaiting();
  console.log('Installed', event);
});

self.addEventListener('activate', function(event) {
  self.addEventListener('fetch', optimusConor);
  console.log('Activated', event);
});


---
Reply to this email directly or view it on GitHub:
https://github.com/slightlyoff/ServiceWorker/issues/844#issuecomment-195356225

Received on Friday, 11 March 2016 13:06:32 UTC