Wait for ServiceWorker to complete registering before subscribing
You can use ServiceWorkerContainer.ready.
Example from MDN:
function subscribe() { var subscribeButton = document.querySelector('.js-subscribe-button'); subscribeButton.disabled = false; navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) { serviceWorkerRegistration.pushManager.subscribe() .then(function(subscription) { // The subscription was successful subscribeButton.disabled = true; return sendSubscriptionToServer(subscription); }) .catch(function(error) { if (Notification.permission === 'denied') { console.log('Permission for Notifications was denied'); subscribeButton.disabled = true; } else { console.log('Unable to subscribe to push.', error); subscribeButton.disabled = false; } }); });}