2015-10-15 25 views
6

Mam następujący kod w moim pracownikiem serwisu:Widząc jeżeli wniosek uda od wewnątrz pracownika serwisu

self.addEventListener('fetch', function (event) { 
    var fetchPromise = fetch(event.request); 

    fetchPromise.then(function() { 
    // do something here 
    }); 

    event.respondWith(fetchPromise); 
}); 

jednak robi jakieś dziwne rzeczy w konsoli dev i wydaje się być co obciążenie skryptu asynchronicznie zamiast synchronicznie (co w tym kontekście jest złe).

Czy istnieje sposób, aby słuchać, gdy żądanie zostanie zakończone bez ręcznego dzwonienia pod numer fetch(event.request)?

Na przykład:

// This doesn't work 
self.addEventListener('fetch', function (event) { 
    event.request.then(function() { 
    // do something here 
    }); 
}); 
+0

Co masz na myśli mówiąc, że skrypt ładuje się asynchronicznie? Co robisz z tym frontem? – philnash

+0

@philnash: Wydaje mi się, że byłem po prostu zdezorientowany przez wodospad: http://i.imgur.com/S3eU293.png Wprowadziłem tę zmianę, a spodziewany czas wczytywania strony przyspieszył o 35% (2.0s -> 1,3 s). Wciąż nie jestem pewien dlaczego. – callumacrae

Odpowiedz

3

Jeśli chcesz się upewnić, że cały szereg działań są wykonywane przed odpowiedzią jest powrót do strony, należy reagować z całego łańcucha obietnicy, nie tylko początkowe obietnicy zwracane przez pobranie.

self.addEventListener('fetch', function(event) { 
    event.respondWith(fetch(event.request).then(function(response) { 
    // The fetch() is complete and response is available now. 
    // response.ok will be true if the HTTP response code is 2xx 
    // Make sure you return response at the end! 
    return response; 
    }).catch(function(error) { 
    // This will be triggered if the initial fetch() fails, 
    // e.g. due to network connectivity. Or if you throw an exception 
    // elsewhere in your promise chain. 
    return error; 
    })); 
}); 
+0

Tak, nie martwię się o to. Dosłownie monitoruję, nie modyfikując niczego, więc to naprawdę nie robi żadnej różnicy. Dzięki :) – callumacrae