Я читаю ServiceWorker https://bitsofco.de/the-service-worker-lifecycle/.
Я был озадачен:
Если в событии активации есть метод event.waitUntil (), активация не будет успешной, пока Обещание не будет выполнено. Если Обещание отклонено, событие активации завершается неудачно, и работник службы становится избыточным.
Что я сделал, как показано ниже:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Google WorkBox</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
</head>
<body>
<script>
// Check that service workers are registered
if ('serviceWorker' in navigator) {
// Use the window load event to keep the page load performant
window.addEventListener('load', () => {
navigator.serviceWorker.register('sw-fetch.js?v=' + 1).then((registration) => {
var sw = null, state;
if(registration.installing) {
sw = registration.installing;
state = 'installing';
} else if(registration.waiting) {
sw = registration.waiting;
state = 'installed'
} else if(registration.active) {
sw = registration.active;
state = 'activated'
}
state && console.log(`sw state is ${state}`);
if(sw) {
sw.onstatechange = function() {
console.log(`sw state is ${sw.state}`);
}
}
});
});
}
</script>
</body>
</html>
sw.js:
self.addEventListener('activate', (event) => {
event.waitUntil(new Promise((resolve, reject) =>{
setTimeout(() => {
reject('Reject activate')
}, 2000)
}))
})
введите описание изображения здесь
Как видите, ServiceWorker был активирован событием через обещание, которое было отменено.