Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过云功能向客户端发送firebase数据库数据_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

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

Javascript 通过云功能向客户端发送firebase数据库数据,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我正试图通过云函数将数据从firebase数据库发送回我的客户机。我想返回整个json子对象。以下是my cloud函数的代码: exports.addNumbers = functions.https.onCall((data, context) => { admin.database().ref('store/ingredients').once('value', function(snapshot) { return snapshot.val(); });

我正试图通过云函数将数据从firebase数据库发送回我的客户机。我想返回整个json子对象。以下是my cloud函数的代码:

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");
  });

但客户端返回的数据为null,云函数只返回firebase日志中的object[object]。请有人帮帮我。

你就快到了。您只需要从云函数的顶级代码中返回一些内容

最简单的方法是使用
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();
});

这在后台也是一样的(实际上只是语法上的糖分),但大多数开发人员发现它更容易阅读。

这有一点帮助,我能够在客户端中获得返回的数据。但是,它在客户端中仍然显示为[object object],因此我认为这意味着它仍然无法获取嵌套在该路径下的子对象的完整json对象,如果我指定最里面的子对象的路径,我将获得该值。但是我想输入这个更广泛的路径,并将整个json子对象作为我的返回值。您可能正在获取数据,但没有正确地打印它。尝试
console.log(result.data)
console.log(JSON.stringify(result.data)+“在客户端”)
JSON.stringify打印数据,是否有办法将数据保持为JSON,以便我以后可以对其执行JSON操作?您已经可以了:如果您从可调用的云函数返回JSON对象,它也将在客户端显示为JSON对象。你只是不能按照你尝试的方式记录它,这就是为什么我向你展示了如何将它转换成字符串。但是您应该已经能够在代码中获取属性,比如
console.log(result.data.childProperty)