MDN vous suggère de faire ce qui suit pour créer et remplir le cache de l'agent de service:
this.addEventListener('install', function(event) {
event.waitUntil(
caches.open('v1').then(function(cache) {
return cache.addAll([
'/sw-test/',
'/sw-test/index.html',
... etc ...
]);
})
);
});
Je ne comprends pas ce code. La méthode waitUntil
est également documentée, et il semble que le code ci-dessus soit le seul but de son existence à l'heure actuelle:
La méthode ExtendableEvent.waitUntil () étend la durée de vie de l'événement. Lorsqu'il est appelé dans un EventHandler associé à l'événement d'installation, il retarde le traitement du travailleur d'installation comme installé jusqu'à ce que la promesse passée se résolve avec succès. Ceci est principalement utilisé pour garantir qu'un technicien de service n'est pas considéré comme installé jusqu'à ce que tous les caches principaux dont il dépend soient remplis.
Ce que je ne comprends pas, c'est:
waitUntil
affecte-t-il généralement le flux de code? Est-ce que cela empêche l'événement de se propager jusqu'à ce que sa promesse soit résolue?Je pose cette question car j'ai des problèmes avec le code ci-dessus et je voudrais le comprendre.
Comme le dit la description, the ExtendableEvent.waitUntil() method extends the lifetime of the event
. Si vous ne l'appelez pas dans une méthode, le service worker peut être arrêté à tout moment (voir la spécification ).
Ainsi, la méthode waitUntil
est utilisée pour dire au navigateur de ne pas terminer le service worker tant que la promesse passée à waitUntil
n'est pas résolue ou rejetée.
A propos de vos questions spécifiques:
install
et activate
, il retarde le changement d'état du technicien de service sur installed
et activated
(voir spécification de la méthode waitUntil , en particulier la dernière partie du paragraphe).