在显示我的网络推送通知时,我在我的选项中添加了一个操作,以便用户可以要求在 30 分钟内再次收到通知。
const options = {
...,
actions: [
{
action: 'remind-action',
title: 'Remind again in 30',
icon: '/remind.png'
}
],
....
}
然后我在服务人员中处理操作:
self.addEventListener('notificationclick', function(event) {
if (!event.action) return
switch (event.action) {
...
case 'remind-action':
event.notification.close()
event.waitUntil(
new Promise((resolve, reject) => {
setTimeout(() => {
const options = {
...
actions: [
{
action: 'remind-action',
title: 'Remind again in 30',
icon: '/remind.png'
}
],
...
}
self.registration.showNotification('Reminder', options)
resolve(true)
}, 30 * 60 * 1000)
})
)
break
}
})
如果只有一种方法可以重新发出推送事件。
上面代码的问题是它不会在 30 分钟后显示通知,但是如果我将超时设置为 1 分钟,它就可以正常工作。
我认为 Chrome 忽略event.waitUntill
并杀死了setTimeout
.
是什么原因造成的,我该如何解决?