我正在使用Firebase作为后端的简单注册系统。我成功验证用户身份并写入数据库。我有一个具有以下结构的课程和用户索引:
{
courses: { // index all the courses available
key1: {
title: "Course 1",
desc: "This is a description string.",
date: { 2018-01-01 12:00:00Z }
members: {
user1: true
...
}
},
key2 { ... },
},
users: { // track individual user registrations
user1: {
key1: true,
...
},
user2: { ... }
}
}
我有一个云函数,它监视用户添加课程,并使用相应的courseId
构建一个数组,该数组将查看courses
节点以返回相应的项目。
exports.listenForUserClasses = functions.database.ref('users/{userId}')
.onWrite(event => {
var userCourses = [];
var ref = functions.database.ref('users/{userId}');
for(var i=0; i<ref.length; i++) {
userCourses.push(ref[i])
}
console.log(userCourses); // an array of ids under the user's node
});
所以,我的问题有两个部分:
答案 0 :(得分:0)
问题1:从客户端,您希望获得对数据库路径的引用。然后,您想要调用 child_added 事件。保留在内存中,只要有人添加就会调用它,然后您可以更新UI。
var ref = db.ref("path/to/courses");
ref.on("child_added", function(snapshot, prevChildKey) {
var newClass = snapshot.val();
});
如果您正在刷新页面,那么您始终可以使用值选项并调用once
问题2:你不是。这被认为是异步功能。如果您想要该函数的响应,那么您将设置HTTP触发器并等待该函数的响应。