我正在尝试通过云函数将数据从我的 firebase 数据库发送回我的客户端。我想返回整个 json 子对象。这是我的云功能的代码:
exports.addNumbers = functions.https.onCall((data, context) => {
admin.database().ref('store/ingredients').once('value', function(snapshot) {
return snapshot.val();
});
});
这是调用此云函数并访问其数据的客户端代码:
const addNumbers = firebase.functions().httpsCallable('addNumbers');
addNumbers().then(result => {
console.log(result.data + "in client");
});
但是客户端中返回的数据为空,并且云函数仅返回 firebase 日志中的对象 [Object]。请有人帮助我。
答案 0 :(得分:1)
你快到了。您只需要从 Cloud Function 中的顶级代码返回一些内容。
最简单的方法是使用 then
子句:
exports.addNumbers = functions.https.onCall((data, context) => {
return admin.database().ref('store/ingredients').once('value').then((snapshot) => {
return snapshot.val();
});
});
现在数据库中的值“冒泡”到调用代码,然后作为承诺从函数中返回。
在现代 JavaScript 版本中,您可以使用 async
/await
使此代码更易于阅读:
exports.addNumbers = functions.https.onCall(async (data, context) => {
let snapshot = await admin.database().ref('store/ingredients').once('value')
return snapshot.val();
});
这在底层的工作原理完全相同(它实际上只是语法糖),但大多数开发人员发现它更容易阅读。