Javascript 服务人员通知承诺破裂?

Javascript 服务人员通知承诺破裂?,javascript,notifications,service-worker,Javascript,Notifications,Service Worker,从中可以看出,showNotification返回一个承诺,该承诺应解析为NotificationEvent 语法 ​ServiceWorkerRegistration.showNotification(标题, 然后(函数(NotificationEvent){…}) 退换商品 决定通知事件的承诺 但是我已经设置好了,通知正在发送,但是如果您查看控制台,您会注意到事件未定义 navigator.serviceWorker.register('worker.js'); Notification.

从中可以看出,
showNotification
返回一个承诺,该承诺应解析为
NotificationEvent

语法 ​ServiceWorkerRegistration.showNotification(标题, 然后(函数(NotificationEvent){…})

退换商品 决定通知事件的承诺

但是我已经设置好了,通知正在发送,但是如果您查看控制台,您会注意到
事件
未定义

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
没有定义,我真的不知道该怎么做


我做错什么事了吗?

我不知道你确切地说什么是要保留通知? 如果您希望在用户单击通知时捕获事件,可以通过添加侦听器来完成

添加返回

return registration.showNotification('Laff', {
在通知时捕获事件单击:

    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);
    });
  }
})

更多信息请参见:

您是否设法解决了此问题?我在promise resolve中遇到的相同事件仅为null。@Deatangel908请查看接受的答案,您可以侦听通知并单击。我不知道为什么这不符合文档要求。我需要通知对象,在我的特殊情况下,我想在超时前关闭通知。不确定文档有什么问题,或者当前规范有什么问题,但是您可以使用
self
获得所有显示通知的列表。在这个答案中,服务人员,不一定是显示通知的代码。也许你想更新你的答案,现在文档似乎已经更新了。showNotification方法返回解析为未定义的承诺。当做