не может получить данные из базы данных firebase (облачные функции)

Я использую облачные функции firebase для прослушивания событий значений базы данных, это мой код

    var functions = require('firebase-functions');
var firebase = require('firebase-admin');

var serviceAccount = require("./serviceAccountKey.json");

firebase.initializeApp({
    credential : firebase.credential.cert(serviceAccount),
    databaseURL: "https://*******.firebaseio.com"
});

exports.notifications = functions.database.ref('/chat/{senderID}/{destinationID}/messages/{pushID}')
    .onWrite(event => {        
        var eventSnapshot = event.data;        
        var sender = eventSnapshot.child('sender').val();
        var message = eventSnapshot.child('message').val();
        var destination = eventSnapshot.child('destination').val();        
        if (event.params.senderID === sender) 
            sendMessage(message,sender,destination);    
    }
);

function sendMessage(message, sender, destination) {

    var senderUser = firebase.database().ref('users/'+sender+'/name'); 
    var tokenUser = firebase.database().ref('fcm/'+destination+'/token');
        tokenUser.once('value').then(function(tokenSnapshot) {
            var token = tokenSnapshot.val(); 
                        console.log(token);                        

    }, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});     
}

Функция onWrite выполняется нормально, но tokenUser.once() не выполняется.


person Neo Algeria    schedule 23.08.2017    source источник
comment
Это правда ? event.params.senderID === sender. Поместите туда несколько операторов журнала с тем, что они выводят, чтобы мы могли хотя бы знать, что происходит, когда вы его запускаете.   -  person Ced    schedule 23.08.2017
comment
Функция sendMessage выполняется, я тестировал ее в журнале, поэтому проблема связана с функцией получения данных   -  person Neo Algeria    schedule 23.08.2017
comment
Есть ли что-нибудь в вашей БД по адресу fcm/'+destination+'/token?   -  person Ced    schedule 23.08.2017
comment
да, это правильный путь   -  person Neo Algeria    schedule 23.08.2017
comment
try var sender = eventSnapshot.ref.child('sender').val(); .data имеет много свойств, одно из которых - ref. Возможно, вам придется использовать .adminRef, если это данные, к которым клиент не может получить доступ.   -  person Jen Person    schedule 23.08.2017
comment
Есть ли на этом пути реальные данные?   -  person Ced    schedule 23.08.2017
comment
проблема в том, что функция tokenUser.once () вообще не выполняется, посмотрите код, который у меня есть в журнале, но он не выполнялся, надеюсь, вы понимаете проблему.   -  person Neo Algeria    schedule 23.08.2017
comment
да, в пути есть данные, но даже если их нет, функция Once () должна выполняться правильно?   -  person Neo Algeria    schedule 23.08.2017
comment
Да, но если я правильно помню, у меня была проблема, когда нулевое значение просто выводило разрыв строки (вместо неопределенного или нулевого). Таким образом, вы можете дважды проверить, что этого не происходит с: console.log('my token is ', token);   -  person Ced    schedule 23.08.2017
comment
где я положил это? вне функции one () или внутри? у меня уже есть журнал внутри, и он не выполнялся. Я также пытался войти (тестировать), и он не выполнил   -  person Neo Algeria    schedule 23.08.2017


Ответы (1)


возможно, если вы попробуете использовать tokenUser.once('value') и не передадите функцию, а сразу получите tokenSnapshot; что-то вроде этого:

tokenUser.once('value').then(tokenSnapshot => {
        var token = tokenSnapshot.val(); 
        console.log(token);                        

});     

Вы можете передать функцию, если используете tokenUser.once() с обратным вызовом; что-то вроде этого:

tokenUser.once('value', function(tokenSnapshot) {
        var token = tokenSnapshot.val(); 
                    console.log(token);                        

}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});   
person leobelizquierdo    schedule 23.08.2017