Ваша база данных - Firestore, но вы используете облачную функцию, которая запускается обновлением в базе данных реального времени.Это две разные службы Firebase, и вам необходимо соответствующим образом изменить свой код.
Будет работать следующий код:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.onMessageCreate = functions.firestore
.document('users/{userId}')
.onUpdate((change, context) => {
// Get an object representing the document
const newValue = change.after.data();
// ...or the previous value before this update
const previousValue = change.before.data();
if (newValue.totalScore !== previousValue.totalScore) {
console.log('NEW TOTAL SCORE');
}
return null;
//I guess you are going to do more than just logging to the console.
//If you do any asynchronous action, you should return the corresponding promise, see point 3 below
//For example:
//if (newValue.totalScore !== previousValue.totalScore) {
// return db.collection("score").doc(newValue.name).set({score: newValue.totalScore});
//}
});
Обратите внимание:
- Вы не можетевызвать облачную функцию
onUpdate
при изменении определенного поля документа.Облачная функция будет запускаться при изменении любого поля документа Firestore.Но вы можете определить, какие поля изменились, как показано в приведенном выше коде. - Начиная с версии 1.0 вам нужно инициализировать с помощью
admin.initializeApp();
, см. https://firebase.google.com/docs/functions/beta-v1-diffList - Вам необходимоукажите платформе, когда облачная функция завершила выполнение: поскольку вы не выполняете никаких асинхронных операций в своей облачной функции, вы можете использовать
return null;
.(Для более подробной информации по этому вопросу, я бы посоветовал вам посмотреть 3 видео о «Обещаниях JavaScript» из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/).