1 / Вы неправильно возвращаете обещание, возвращенное асинхронным методом once()
.
2 / В следующих строках также есть ошибка:
console.log(evnt.after.val);
const sensData = evnt.after.val;
Должно быть:
console.log(evnt.after.val());
const sensData = evnt.after.val();
, поскольку val()
является методом
3 / Наконец следует учитывать случай, когда статус <= 71. </p>
Поэтому вы должны адаптировать свой код следующим образом:
exports.pressureExceeding = functions.database.ref("Reservoir/{id}")
.onUpdate(evnt => {
console.log(evnt.after.val);
const sensData = evnt.after.val;
const status = sensData.sensor3;
console.log(evnt.after.val);
if (status > 71) {
const payLoad = {
notification: {
title: "Emergency Alert",
body: "{sensData.keys} Pressure is High",
badge: "1",
sound: "defualt" // <- Typo
}
};
//What happens if status <= 71?? You should manage this case, as you are using payload below.
return admin.database().ref("FcmToken").once("value"). // <- Here return the promise returned by the once() method, then you chain the promises
.then(allToken => {
if (allToken.val()) {
console.log("token available");
const token = Object.keys(allToken.val());
return admin.messaging().sendToDevice(token, payLoad);
} else {
console.log("no token available");
return null; // <- Here return a value
}
});
}
});
Последнее замечание: вы используете старый синтаксис для версий <1.0. Вам, вероятно, следует обновить версию облачной функции (и адаптировать синтаксис). Посмотрите на следующий документ: <a href="https://firebase.google.com/docs/functions/beta-v1-diff" rel="nofollow noreferrer">https://firebase.google.com/docs/functions/beta-v1-diff