Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 云函数仅检索数据库中的第一项,而不是全部_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript 云函数仅检索数据库中的第一项,而不是全部

Javascript 云函数仅检索数据库中的第一项,而不是全部,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我有一个使用Firebase实时数据库的云函数来检索一些数据。我的数据库中有几个项目,但是函数当前仅检索第一个项目。我不确定为什么会发生这种情况,因为我正在使用for循环迭代所有项目。这是我的密码: admin.initializeApp(firebaseConfig); var ref = admin.database().ref('users') exports.checkusers = functions.https.onRequest((req, res) => { re

我有一个使用Firebase实时数据库的云函数来检索一些数据。我的数据库中有几个项目,但是函数当前仅检索第一个项目。我不确定为什么会发生这种情况,因为我正在使用for循环迭代所有项目。这是我的密码:

admin.initializeApp(firebaseConfig);
var ref = admin.database().ref('users')

exports.checkusers = functions.https.onRequest((req, res) => {
    ref.on("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            let users =  [];
            users.push({
                key: childSnapshot.key,
                data: childSnapshot.val()
            })
            return res.json(users);
        });
    })
})

我曾试图解决这个问题,但这是谷歌风格的做法,所以我不确定为什么这不起作用。任何帮助都将不胜感激。

这是因为对于数组中的每个元素,都将重新初始化。尝试将用户从for each中拉出

admin.initializeApp(firebaseConfig);
var ref = admin.database().ref('users')

exports.checkusers = functions.https.onRequest((req, res) => {
    let users =  [];
    ref.on("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            users.push({
                key: childSnapshot.key,
                data: childSnapshot.val()
            })
        });
    })
    return res.json(users);
})

你做错了两件事。首先,您应该只在一次调用
res.json()
时使用所有要发送的数据,而不是在forEach循环中。其次,您应该使用
once()
而不是
on()
来查询单个时间,并使用它返回以知道查询何时完成的承诺。从这一点开始,以您的方式找到最终解决方案:

exports.checkusers = functions.https.onRequest((req, res) => {
    ref.once("value").then(snapshot => {
        res.json(snapshot.val());
    })
})

查看这篇文章,它按照建议做了更改,但仍然存在相同的问题,只提取数据库中的第一项更新了答案。请试试这个谢谢!现在为我工作,老实说我很困惑我怎么会错过这个。