Облачные функции для Firebase, запускаемые событиями в фоновом режиме , должны возвращать обещание (или в некоторых случаях значение, например, return false;
).
Поскольку admin.messaging().send()
возвращает обещание (см. документ ), вам просто нужно вернуть это обещание следующим образом:
var androidNode = {};
androidNode[constants.propertyNotificationString] = notificationNode;
message[constants.propertyAndroidString] = androidNode;
....
return admin.messaging().send(message);
})
.catch((error) => {
console.log('Error sending message:', error);
return false;
});
Однако вы также звоните snapshotNotificationMessage.ref.remove();
, что также возвращает обещание. Поэтому вы должны связать эти обещания в своей облачной функции. Это , вероятно должно быть сделано следующим образом, но без вашего полного кода трудно гарантировать, что это на 100% правильно. Если вы добавите к своему вопросу весь свой код, мы можем адаптировать его.
....
var androidNode = {};
androidNode[constants.propertyNotificationString] = notificationNode;
message[constants.propertyAndroidString] = androidNode;
return snapshotNotificationMessage.ref.remove();
.then(() => {
return admin.messaging().send(message);
})
.catch((error) => {
console.log('Error sending message:', error);
return false;
});
Кроме того, я предлагаю вам посмотреть эти два видео от команды Firebase, которые объясняют, почему и как вернуть обещание:
https://www.youtube.com/watch?v=7IkUgCLr5oA
https://www.youtube.com/watch?v=652XeeKNHSk
Первый - больше о функциях HTTP, которые запускаются через HTTP-запрос (т.е. не с фоновым событием), а второй - о функциях, запускаемых фоновым событием, но рекомендуется просматривать первую перед просмотром второго один.