Уведомление работника службы обещание нарушено?


Из MDN я вижу, что showNotification возвращает обещание, которое должно разрешиться в NotificationEvent.

Синтаксис

ServiceWorkerRegistration.showNotification (название, [варианты]).затем (функция (NotificationEvent) { ... });

Возвращает

Обещание, которое разрешается в NotificationEvent.

Однако я установил его здесь , уведомление отправляется и все, но если вы посмотрите на консоль, вы заметите, что event не определено.

navigator.serviceWorker.register('worker.js');

Notification.requestPermission(function (result) {
    if (result === 'granted') {
        navigator.serviceWorker.ready.then(function (registration) {
            registration.showNotification('Laff', {
                body: 'Hello, you have unread mesages!',
                icon: '/apple-touch-icon.png',
                tag: 'test'
            }).then(function(event){
                console.log(event);
            });
        });
    }
});
Мне нужно получить уведомление, которое я думал, что смогу сделать из event.notification, но поскольку event не определено, я действительно не знаю, что делать.

Я делаю что-то не так?

2 3

2 ответа:

Я не уверен, что именно вы подразумеваете под получением уведомления ? если вы хотите захватить событие, когда пользователь нажмет на уведомление, Вы можете сделать это, добавив прослушиватель.

Добавить возврат .

return registration.showNotification('Laff', {

Поймать событие на notificationClick:

    self.addEventListener('notificationclick', function (event) {

        var tag = event;
}

Надеюсь, это поможет

Действительно есть проблема в документах, метод showNotification не возвращает объект NotificationEvent.

Если вы не хотите ждать щелчка, вы можете использовать метод getNotifications. Вот код для закрытия уведомления через 3 секунды.

self.registration.showNotification(...).then(() => {
    self.registration.getNotifications({tag: ...}).then(notifications => {
      setTimeout(() => notifications[0].close(), 3000);
    });
  }
})

Дополнительная информация здесь: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/getNotifications