调用firebase函数返回null



我正在调用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;
}
});
});

相关内容

  • 没有找到相关文章

最新更新