Я пытаюсь сделать простой веб-сайт, который отправляет некоторые push-уведомления.Вот часть кода:
function getSubscribers() {
var subscribers = {};
try {
var subscribersRaw = fs.readFileSync(SUBSCRIBERS_PATH);
subscribers = JSON.parse(subscribersRaw);
} catch (err) {}
return subscribers;
}
function setSubscribers(data) {
fs.writeFileSync(SUBSCRIBERS_PATH, data);
}
function sendNotifications(req, res) {
var message = "message";
var icon = "icon.png"
var subscribers = getSubscribers();
var subscriber_deleted = 0;
for (var subid in subscribers) {
const subscription = subscribers[subid];
const payload = {
message: message,
icon : icon
};
const options = {
TTL: 3600
};
webPush.sendNotification(subscription, JSON.stringify(payload), options)
.then(function() {})
.catch(function(error) {
console.log(error);
if (error.statusCode === 410) {
delete subscribers[subid];
subscriber_deleted = 1;
}
});
}
if(subscriber_deleted==1)
{
setSubscribers(JSON.stringify(subscribers));
}
}
Основная проблема - webPush.sendNotification в функции sendNotifications.webPush.sendNotification возвращает обещание, которое возвращает тот же объект в случае успеха или неудачи.Основным отличием является код ошибки внутри возвращаемого объекта, который похож на код http.Если код возврата равен 410, необходимо не отправлять уведомление в следующий раз.
Эта часть бесполезна из-за асинхронного свойства webPush.sendNotification
if(subscriber_deleted==1)
{
setSubscribers(JSON.stringify(subscribers));
}
Я пытался использовать Promise.all, особенно функцию 'finally', но безуспешно.
Какправильно с этим справиться?