Firebase云函数-返回未定义
这是我用来从数据库中获取senderName和messageText的代码。在我的日志中,我收到一个错误,上面写着“函数返回了未定义的、预期的承诺或值”。我正在使用此功能向邮件接收者发送通知。正在正确发送通知Firebase云函数-返回未定义,firebase,firebase-cloud-messaging,google-cloud-functions,Firebase,Firebase Cloud Messaging,Google Cloud Functions,这是我用来从数据库中获取senderName和messageText的代码。在我的日志中,我收到一个错误,上面写着“函数返回了未定义的、预期的承诺或值”。我正在使用此功能向邮件接收者发送通知。正在正确发送通知 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); exp
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendPushNotification = functions.database.ref('/messages/{messageId}').onWrite(event => {
var db = admin.database();
var messageText;
var senderName;
var receiverId;
var senderId;
var messageId = event.params.messageId;
var messageTextRef = db.ref('/messages/' + messageId + '/text');
var senderIdRef = db.ref('/messages/' + messageId + '/fromId');
var receiverIdRef = db.ref('/messages/' + messageId + '/toId');
messageTextRef.once("value", function(data) {
messageText = data.val();
senderIdRef.once("value", function(data) {
senderId = data.val();
receiverIdRef.once("value", function(data) {
receiverId = data.val();
var senderNameRef = db.ref('/users/' + senderId + '/name');
senderNameRef.once("value", function(data) {
senderName = data.val();
console.log(senderName);
console.log(messageText);
const payload = {
notification : {
title: String(senderName),
body: String(messageText),
badge: "1",
sound: 'default',
}
};
return admin.database().ref('fcmToken').once('value').then(allToken => {
if (allToken.val()) {
const token = Object.keys(allToken.val());
return admin.messaging().sendToTopic(receiverId, payload).then(response => {
});
};
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
});
});
你有一个怪物的功能。如果在获取应解决问题的所有数据库值时返回最外层的
Promise
,并确保在所有计算完成之前不会停止函数。在您的情况下,这在第25行:
...
return messageTextRef.once("value", function(data) {
...