Javascript 云函数仅检索数据库中的第一项,而不是全部
我有一个使用Firebase实时数据库的云函数来检索一些数据。我的数据库中有几个项目,但是函数当前仅检索第一个项目。我不确定为什么会发生这种情况,因为我正在使用for循环迭代所有项目。这是我的密码: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
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());
})
})
查看这篇文章,它按照建议做了更改,但仍然存在相同的问题,只提取数据库中的第一项更新了答案。请试试这个谢谢!现在为我工作,老实说我很困惑我怎么会错过这个。