1

這是我用來從我的數據庫中提取senderName和messageText的代碼。在我的日誌中,我收到一個錯誤,說「函數返回undefined,預期Promise或值」。我正在使用此功能將通知發送到郵件的收件人。通知正在適當發送。Firebase Cloud Functions - return undefined

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) { 

... 
相關問題