Облачные функции Firebase Firestore - не может прочитать свойство 'text' из null - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь написать облачную функцию Google, которая читает из документа.

Эта функция работает нормально, она может возвращать значение:

exports.helloWorld = functions.https.onRequest((request, response) => {
    var userArr = [];
    fs.collection("user")
        .where("user_id", "==", "qIXpbXTuJ5PQHm3rGuTeeSbdnWi1")
        .get()
        .then(querySnapshot => {
            querySnapshot.forEach(doc => {
                userArr.push(doc.data());
            });
            response.send(userArr);
        })
        .catch(err => {
            return err;
        });
});

Но эта ошибка возврата:

Сервер

exports.matches_people = functions.https.onCall((data, context) => {
    var userArr = [];
    fs.collection("user")
        .where("user_id", "==", "qIXpbXTuJ5PQHm3rGuTeeSbdnWi1")
        .get()
        .then(querySnapshot => {
            querySnapshot.forEach(doc => {
                userArr.push(doc.data());
            });
            return userArr;
        })
        .catch(err => {
            return err;
        });
});

Клиент

var matches_people = firebase.functions().httpsCallable('matches_people');
                matches_people({
                    user_id:  self.login.user_id
                }).then(function (result) {
                    // Read result of the Cloud Function.
                    var sanitizedMessage = result.data.text;
                    console.log(result);
                    // ...
                }).catch(function (error) {
                    // Getting the Error details.
                    var code = error.code;
                    var message = error.message;
                    var details = error.details;
                    console.log(error); //return error: TypeError: Cannot read property 'text' of null
                    // ...
                });

На httpsCallable возвращается ошибка TypeError: Невозможно прочитать свойство 'text' со значением NULL

Пожалуйста, помогите.

Извините за мой английский

1 Ответ

0 голосов
/ 05 сентября 2018

В HTTP Callable Functions, чтобы «вернуть данные после асинхронной операции, вернуть обещание », как объяснено в документе здесь .

Метод get() является асинхронным и возвращает обещание, как объяснено здесь .

Таким образом, вы должны просто вернуть обещание, возвращенное методом get(), следующим образом:

exports.matches_people = functions.https.onCall((data, context) => {
    var userArr = [];
    return fs.collection("user")   //  <- Note the return here
        .where("user_id", "==", "qIXpbXTuJ5PQHm3rGuTeeSbdnWi1")
        .get()
        .then(querySnapshot => {
            querySnapshot.forEach(doc => {
                userArr.push(doc.data());
            });
            return userArr;
        })
        .catch(err => {
            return err;
        });
});

Обратите внимание, что в случае облачных функций HTTP это не так, и вы должны заканчивать send(), redirect() или end().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...