通过云功能向客户端发送firebase数据库数据

时间:2021-01-17 01:50:49

标签: javascript firebase firebase-realtime-database google-cloud-functions

我正在尝试通过云函数将数据从我的 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]。请有人帮助我。

1 个答案:

答案 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();
});

这在底层的工作原理完全相同(它实际上只是语法糖),但大多数开发人员发现它更容易阅读。

相关问题