我正在尝试编写一个从文档读取的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
请帮助。
对不起,我的英语
答案 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()
结尾。