gpt4 book ai didi

javascript - 无法在 'waitUntil' 上执行 'ExtendableEvent'

转载 作者:行者123 更新时间:2023-11-30 12:01:18 24 4
gpt4 key购买 nike

我需要 chrome 注册 ID 将其作为参数发送给 API 调用,这样我就可以获取与注册 ID 对应的消息。我的代码如下:

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

var apiPath = 'http://localhost/api/v1/notification/getNotification?regId=';
event.waitUntil(registration.pushManager.getSubscription().then(function (subscription){
apiPath = apiPath + subscription.endpoint.split("/").slice(-1);
event.waitUntil(fetch(apiPath).then(function(response){
if(response.status !== 200){
console.log("Problem Occurred:"+response.status);
throw new Error();
}
return response.json().then(function(data){
var title = data.title;
var message = data.body;
var icon = data.icon;
var tag = data.tag;
var url = data.url;
return self.registration.showNotification(title,{
body: message,
icon: icon,
tag: tag,
data: url
});
})
}).catch(function(err){
var title = 'Notification';
var message = 'You have new notifications';
return self.registration.showNotification(title,{
body: message,
icon: '/images/Logo.png',
tag: 'Demo',
data: 'http://www.google.com/'
});
})
)
}));
return;
});

我在上面的代码中遇到的错误是:

未捕获( promise )DOMException:

Failed to execute 'waitUntil' on 'ExtendableEvent': The event handler is already finished.(…) along with the extra notification 'The site has been updated in the background'. Now even if I remove event.waitUntil before the fetch(apiPath) part, I am still getting that extra notification.

请帮我找到解决办法。

P.S:问题在 Chrome Push Notification: This site has been updated in the background对我来说似乎没有任何用处。

最佳答案

您不需要多次调用 event.waitUntil。您只需调用它一次并向其传递一个 promise ,事件的生命周期将延长,直到 promise 得到解决。

self.addEventListener('push', function(event) {
var apiPath = 'http://localhost/api/v1/notification/getNotification?regId=';

event.waitUntil(
registration.pushManager.getSubscription()
.then(function(subscription) {
apiPath = apiPath + subscription.endpoint.split("/").slice(-1);

return fetch(apiPath)
.then(function(response) {
if (response.status !== 200){
console.log("Problem Occurred:"+response.status);
throw new Error();
}

return response.json();
})
.then(function(data) {
return self.registration.showNotification(data.title, {
body: data.body,
icon: data.icon,
tag: data.tag,
data: data.url,
});
})
.catch(function(err) {
return self.registration.showNotification('Notification', {
body: 'You have new notifications',
icon: '/images/Logo.png',
tag: 'Demo',
data: 'http://www.google.com/'
});
});
})
);
});

关于javascript - 无法在 'waitUntil' 上执行 'ExtendableEvent',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36571510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com