Облачные функции возвращают ноль при вызове прямо из приложения - PullRequest
3 голосов
/ 21 марта 2019

Я пытаюсь использовать облачные функции Firebase из моего приложения, чтобы публиковать электронные письма и имена пользователей в облачную коллекцию firestore со случайно сгенерированными идентификаторами. Все работает хорошо, но я хочу получить ответ от функции на мое приложение, и мне не удается это сделать. Вот мой код из моего приложения, где я вызываю облачную функцию:

onPress ({commit, dispatch}, payload) {
      var addUserInformation = firebase.functions().httpsCallable('addUserInformation');
      addUserInformation(payload)
      .then(function(result) {
        console.log(result)
      }).catch(function(error) {
        var code = error.code;
        var message = error.message;
        var details = error.details;
        console.log(code);
        console.log(message);
        console.log(details);
      });
    },

А вот код облачной функции:

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

admin.initializeApp(functions.config().firebase);

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//


exports.addUserInformation = functions.https.onCall((data) => {
    admin.firestore().collection('Backend').where('email', '==', data[1]).get()
    .then(function(querySnapshot) {
            if (querySnapshot.size > 0) {
                console.log('Email already exists')
            } else {
                admin.firestore().collection('Backend').add({
                    name: data[0],
                    email: data[1]
                })
                console.log('New document has been written')
            }
        return {result: 'Something here'};
    })
    .catch(function(error) {
        console.error("Error adding document: ", error);
    })
});

Консоль показывает, что результат равен нулю

1 Ответ

3 голосов
/ 21 марта 2019

Вы не возвращаете обещание из верхнего уровня своего кода облачных функций, что означает, что код заканчивается без возврата чего-либо вызывающей стороне.

Чтобы это исправить, верните значение верхнегоУровень получения:

exports.addUserInformation = functions.https.onCall((data) => {
    return admin.firestore().collection('Backend').where('email', '==', data[1]).get()
    .then(function(querySnapshot) {
            if (querySnapshot.size > 0) {
                console.log('Email already exists')
            } else {
                admin.firestore().collection('Backend').add({
                    name: data[0],
                    email: data[1]
                })
                console.log('New document has been written')
            }
        return {result: 'Something here'};
    })
    .catch(function(error) {
        console.error("Error adding document: ", error);
    })
});
...