Firebase Cloud Functions Firestore-无法读取null的属性“文本”

时间:2018-09-05 09:29:10

标签: firebase google-cloud-firestore google-cloud-functions

我正在尝试编写一个从文档读取的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: Cannot read property 'text' of null

请帮助。

对不起,我的英语

1 个答案:

答案 0 :(得分:0)

在HTTP可调用函数中,为了“在异步操作后返回数据,返回承诺”,如文档here中所述。

get()方法是异步的,并返回承诺,如here所述。

因此,您应该只返回get()方法返回的promise,如下所示:

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 Cloud Functions不同,您必须以send()redirect()end()结尾。