我正在调用Functions函数来获取用户信息,但它返回null。请告诉我解决办法。
工作空间/功能/src/index.ts
exports.getUser = functions.https.onCall((data, context) => {
admin.database().ref(`user/${data.userId}`)
.on('value', (snapshot) => {
if (snapshot) return snapshot.val();
});
});
工作区/src/app/sample.component.ts
firebase.functions().httpsCallable('getUser')({
userId: profile.userId
}).then(data => {
console.log(data);
}).catch(error => {
alert(error);
});
如果您的https可调用文件中没有返回任何内容,请添加一个返回:
exports.getUser = functions.https.onCall((data, context) => {
return admin.database().ref(`user/${data.userId}`)
.on('value', (snapshot) => {
if (snapshot) return snapshot.val();
});
});
首先,您应该使用once()
而不是on()
进行查询。on((设置了一个持久侦听器,这在云函数中是不好的,因为它可能会泄露侦听器并花费您的钱。once((执行一个查询并返回一个可以使用的promise。
其次,您应该从函数中返回一个promise,该promise使用要返回给客户端的数据进行解析。这是可调用类型触发器所必需的。现在,您没有从顶级函数返回任何内容。
第三,您应该通过函数在每个代码路径中返回一个值。
exports.getUser = functions.https.onCall((data, context) => {
return admin.database().ref(`user/${data.userId}`).once('value')
.then(snapshot => {
if (snapshot) {
return snapshot.val();
}
else {
// indicates that there was no data for the userId
return null;
}
});
});