1

これは私のデータベースからsenderNameとmessageTextをフェッチするために使用しているコードです。私のログでは、 "関数が未定義、期待されたプロミスまたは値を返す"というエラーが表示されています。私はこの機能を使用して、メッセージの受信者に通知を送信しています。通知は適切に送信されています。Firebase Cloud Functions - 未定義の返信

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); 
    }); 


});                    
}); 

答えて

2

あなたはモンスター機能を持っています。最も外側のPromiseを返して問題を解決するすべてのデータベース値を取得し、すべての計算が完了する前に関数が停止していないことを確認した場合。あなたの場合、これは〜25行目です:

... 

return messageTextRef.once("value", function(data) { 

... 
関連する問題