2015-10-15 1 views
6

Je le code suivant dans mon travailleur de service:voir si une demande réussit à l'intérieur d'un travailleur de service

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

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

    event.respondWith(fetchPromise); 
}); 

Cependant, il est fait des trucs bizarres dans la console dev et semble faire la charge de script de manière asynchrone au lieu de synchrone (ce qui dans ce contexte est mauvais).

Est-il possible d'écouter quand une demande est terminée sans appeler manuellement fetch(event.request)?

Par exemple:

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

Que voulez-vous dire que le script se charge de manière asynchrone? Que faites-vous à l'avant avec ça? – philnash

+0

@philnash: Je pense que j'étais juste confus par la chute d'eau: http://i.imgur.com/S3eU293.png J'ai fait ce changement et le temps de chargement perçu du site a accéléré de 35% (2.0s -> 1.3s). Je ne sais toujours pas pourquoi. – callumacrae

Répondre

3

Si vous voulez vous assurer que votre série d'actions ensemble sont effectuées avant que la réponse est renvoyée à la page, vous devez répondre à l'ensemble de la chaîne de promesse, non seulement la promesse initiale retourné par aller chercher.

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

Ouais, je ne m'inquiète pas pour ça. Je surveille littéralement, ne modifie rien, donc ça ne fait pas vraiment de différence. Merci :) – callumacrae