ServiceWorker был активирован, хотя обещание было отклонено в дескрипторе события активации - PullRequest
0 голосов
/ 12 ноября 2018

Я читаю 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 был активирован событием через обещание, которое было отменено.

...