- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经研究和试错好几天了,但没能取得任何成果。在测试中,我在 Firebase Realtime 数据库中创建了一些测试 Node ,以便尝试计算出该函数的逻辑。我的文件树如下所示:
为了简单地让基础知识发挥作用,我在 TestUsers
Node 下创建了一些用户,每个用户都有一个非常简单的 Statistics
子结构,然后是一个 球体
值。
我正在尝试做什么:
在更新任何用户下的 orbs
值时,我想编写(好吧,技术上“更新”)Output/firstPlace
子项以包含用户名和前 3 位用户的球体数量(在 TestUsers
下的所有用户中具有最高的球体数量。
看起来非常简单,相信我,我知道有大量关于排序和过滤 Firebase 实时数据库数据的文档,但我在阅读该文档几天后仍无法将它们拼凑在一起。
我正在使用 VS Code 编写函数并将其部署到我的 Firebase 项目中。
我为尝试执行上述操作而编写的函数是这样的:
//Define a new function with a base path and set it to run when a child of this path is changed
exports.testTopPlayers1 = functions.database.ref('/TestUsers/{user}/Statistics').onUpdate(_ => {
var allPlayersRef = admin.database().ref('/TestUsers/{user}'); //When this function runs, assign a new path of all users
//Get a snapshot of the top 3 users with the highest orb count
allPlayersRef.orderByChild('orbs').limitToLast(3).once('value', (snap) => {
//For each child from the above snap (should be 3)...
snap.forEach((child, context) => {
const username = context.params.user; //Assign the username to a const
const afterOrbAmount = child.after.val();
const orbAmount = afterOrbAmount.orbs; //Assign the number of orbs to a const
//Return (Promise?) by updating the data in '/Output/firstPlace' with the username and orb amount.
return admin.database().ref('/Output/firstPlace').update({[username]: [orbAmount]});
});
})
})
我希望使用 .forEach
时,它应该运行对 '/Output/firstPlace
部分的写入 3 次,从而有效地为我提供 3 个新的键值对。但什么也没发生。
根据我正在尝试做的事情,您可以更正我的代码或向我展示在后端实现这样的高分排序的正确方法吗?
最佳答案
您不会从代码的顶层返回任何内容,这意味着 Cloud Functions 无法知道您的代码何时完成。因此:它会在最后一个 }
之后停止您的代码,即数据库读取完成之前。
您的代码应如下所示:
exports.testTopPlayers1 = functions.database.ref('/TestUsers/{user}/Statistics').onUpdate(_ => {
var allPlayersRef = admin.database().ref('/TestUsers/{user}'); //When this function runs, assign a new path of all users
let query = allPlayersRef.orderByChild('orbs').limitToLast(3)
return query.once('value').then((snap) => {
let promises = [];
snap.forEach((child, context) => {
const username = context.params.user;
const afterOrbAmount = child.after.val();
const orbAmount = afterOrbAmount.orbs;
promises.push(admin.database().ref('/Output/firstPlace').update({[username]: [orbAmount]}));
});
return Promise.all(promises);
})
})
您的代码中可能存在更多问题,但这可以确保您的云函数将继续运行,直到查询和后续更新完成。
我强烈建议您学习以下内容,以了解有关如何控制云函数何时终止的更多信息:
关于javascript - 如何使用云函数、Node.js 和 Javascript 对 Firebase 实时数据库进行排序和筛选 'High Score' 排行榜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61565829/
我正在研究这个领域以获得实时对象检测。 视频示例: http://www.youtube.com/watch?v=Bm5qUG-06V8 http://www.youtube.com/watch?v=
问题 我正在为 C 语言的项目寻找一种数据结构来存储列表列表。我需要能够访问仅给定 n 的第 n 个列表(这些术语将被乱序访问)。各个列表将包含 1 到 M 之间的整数(为了具体起见,假设 M = 2
我有一个List (Maybe a),我想过滤出Nothing的实例。我大概已经做到了,但是对所需的代码量却不满意: removeNothingFromList : List (Maybe a) ->
我对 Blazor 有基本的输入 当我输入我认为无效的字符(例如“/”或“:/\\""|?* ]"; Search = Regex.Replace(args.Value.ToSt
我有一个主应用程序,允许用户编辑所有数据(大约 20 个字段)。更新后,我将其添加到服务总线主题中,系统的其他区域也订阅了该主题。 其中一个订阅仅关心单个字段(电话号码)是否更新。我想知道处理这个问题
我是ElasticSearch的新手,需要帮助解决以下问题: 我有一组包含多个产品的文档。我想通过“Apple”过滤产品属性product_brand并获取与过滤器匹配的产品数量。但是,结果应按文档I
我想过滤查询集中特定范围内的项目。这就是我的模型的样子 class modelEmployee(models.Model): user = models.ForeignKey(User, on
尽管数组 a 的大小不断增加,但我无法找到 8 位素数。它适用于较小的数字: #include #include int main() { int n,a[100000],i,m,k;
我不希望能够使用代码隐藏来搜索我的 gridview 结果。 我有一个按钮和一个 GridView :
我想使用 sift/surf 进行模板匹配。图像可以有 1...n 个目标。使用 surf/sift 只能提取一个目标。一种想法是将图像分割成多个片段,然后寻找筛选/冲浪匹配。它有效,但显然由于速度和
这是使用 Xodus API 限制实体查询的方法: final EntityIterable allUsers = txn.getAll(storeName).skip(skip).take(limi
我有 2 个 excel 文件:IDList.csv 和 Database.csv。 IDList 包含我要从数据库中过滤掉的 300 个 ID 号的列表,其中包含 2000 个条目(在数据库中留下
过滤 Treeview 节点的最佳/有效方法是什么? 例如:我输入“abc”,只有包含“abc”的节点可见。然后我输入 “abcd”,我应该会看到唯一包含 “abcd” 文本的节点。依此类推,所以每次
我有两个关于报告的 tablix,以及一个用于向 tablix 提供数据的数据集。我在报告中有一个多选参数,我需要根据该参数中的值过滤结果。 有什么区别,如果有,什么是更好的解决方案: 直接在数据集或
我对 flex 搜索/ NEST还是很陌生,需要一些帮助才能查询/过滤我的数据。 我有一个产品 list 。而且这些产品可以具有任意数量的选项,并具有与之相关的值。而且我需要能够按选项名称及其值来过滤
我正在使用过滤条件从原始表创建一个表,其中我的过滤值来自 SELECTEDVALUE 表格没有根据 SELECTEDVALUE 进行过滤,如果我用一个真实的值替换它就可以了。 代码(不起作用) Tra
我正在设置一个 MSBuild 项目来运行一些 NUnit 测试,使用 MSBuild Community Tasks Project 。 通过这些设置,我将能够运行 NUnit 测试:
我正在使用过滤条件从原始表创建一个表,其中我的过滤值来自 SELECTEDVALUE 表格没有根据 SELECTEDVALUE 进行过滤,如果我用一个真实的值替换它就可以了。 代码(不起作用) Tra
例如,我们有一个列表,我们想用特定的谓词将其分成两部分。 首先,我们可以使用filter和filterNot。 val trueList = list.filter(predicate) val fa
我尝试为 [Start] 使用某种范围: var calendar = outlookApplication.GetNamespace("MAPI").GetDefaultFolder(OlDefau
我是一名优秀的程序员,十分优秀!