问题标签 [firebase]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 使用 Firebase 的数据库式查询
有没有一种使用 Firebase 执行数据库样式查询的快速方法?
例如:
users
给定带有字段user_id
、name
和的 firebase 引用age
,执行类似于此的查询的最佳方法是什么:
和
firebase - Firebase 中的记录总数(我什么时候完成计数?)
计算表中的记录显然是一项手动工作,直到你们获得一些已经在工作中的漂亮新功能;)
但是,即使使用带有 .on('value', ...) 的手动运行来获取计数,我也会坚持下去:
我预见到任何类型的分页都会出现同样的问题,我觉得我对此有点呆滞。我错过了什么?
例如,对于获取用户在他/她的队列中的消息数量,这从根本上来说是错误的模式吗?
javascript - Firebase child_added
我的应用程序现在可以运行,但我不确定它为什么会运行...
我有一些类似的代码:
问题是当我稍后尝试使用itemRef
它时它不起作用。然而,我花了几个小时才意识到引用不起作用,因为itemRef.name()
返回了正确的引用名称。
在搜索 API 时,我遇到了该.ref()
函数。API 声明.ref()
返回“生成此 DataSnapshot 的位置的 Firebase 参考”。这使该功能对我来说完全没有意义,但我决定尝试一下:
谁能向我解释为什么.ref()
我的参考工作只是返回“生成此 DataSnapshot 的位置的 Firebase 参考”。??
firebase - Firebase child_removed 未被调用
这是我的代码的基本思想。我从我的实际代码中删除了很多额外的东西,但它主要是 css - 它都不应该对此产生任何影响......
问题是,$("#button")
点击时,itemRef 会从 Firebase 中的 listRef 中删除,但该'child_removed'
事件永远不会触发......如果我取出
然后child_removed
被称为...
其他一切正常 -$("#name")
已更新,alert()
我用来测试它的所有对话框都工作正常 - 唯一的问题是child_removed
没有被调用。
javascript - 在函数中处理异步调用 (Firebase)
现在我多次遇到使用 Firebase 的同步和异步函数的问题。我的问题通常是我需要在我编写的函数中进行异步 Firebase 调用。举个简单的例子,假设我需要计算和显示一个物体的速度,并且我的 Firebase 存储了距离和时间:
当然,上面的代码是行不通的,因为firebaseRef.once()
是异步调用,所以velocity
我们到达的时候还没有设置return velocity;
。如果我们将其return
放在.on()
回调函数内部,则根本不会返回任何内容。
一种解决方案是使我的calcVelocity()
函数也异步。
另一种解决方案是存储 Firebase 的缓存版本,该版本同步读取但从 Firebase 异步更新。
这些解决方案中的一种是否比另一种更好?有没有更好的解决方案?
javascript - Ajax / Firebase 仅适用于本地主机(同源策略?)
我有一个 Firebase 应用程序可以在 localhost 上完美运行,但是当我从外部访问它时(通过允许在我的路由器中进行端口转发)或当我将它上传到 Bluehost 时它不起作用。
此代码有效:
但这不会:
经过一些研究,我认为问题出在Same Origin Policy,因为 Firebase JS 包含的是
但我的 Firebase 参考已开启
我找到了一些解决此问题的方法,但想知道使用 Firebase 处理它的最佳方法(或者如果同源策略甚至是这里的问题)。
firebase - 添加到列表时类似于 Firebase 事务()的功能?
这是一个相当复杂的问题,但我会尽量简单明了地解释它......
我正在使用 Firebase 构建一个基于网络的多用户游戏。我保留了游戏中每一轮的列表。在一轮结束时,每个用户都会看到一个“开始”按钮,当他们准备好开始下一轮时,他们会单击该按钮。当至少 50% 的用户点击“开始”时,该回合开始。
我有一个gameRef
游戏的 Firebase 参考,一个roundListRef
代表轮次列表的参考,以及一个roundRef
代表当前轮次的参考。
我附加了一个child_added
回调,roundListRef
以便在添加新一轮时,它成为每个人的当前轮:
我可以从那里轻松跟踪newRoundVotes
和activePlayers
计算 50%。如果达到50%,则增加一个新的回合,触发每个人的child_added
事件,新的回合将从那里开始……
我的问题是,我如何确保只添加一个新回合,并且每个人都在同一回合中?
例如,假设有 10 名玩家和 4 人已经投票开始下一轮。如果第 6 位玩家在第 5 位玩家触发他的事件之前投票child_added
,则也将为第 6 位玩家添加一轮。
问题类似于.set()
vs .transaction()
,但不完全相同(根据我的理解)。
有没有人有办法解决吗?
firebase - Firebase child_added 只添加孩子
从 Firebase API:
已添加子节点:该位置的每个初始子节点都会触发一次此事件,每次添加新子节点时都会再次触发该事件。
一些代码:
但是由于这个位置的每个孩子都调用了一次函数,有没有办法只获取实际添加的孩子?
firebase - 使用 .off 停用事件
我的大多数 .on 事件都使用闭包:
这意味着,无法使用 .off() 停用这些监视器,因为 off 需要原始回调指针以及 eventType。我怎么能做这种事情?
我的应用程序(jQuery Mobile)是基于页面的。当用户点击某个页面时,我想激活监视器。当用户离开该页面时,我想停用,所以当他们重新进入时,我不会有多个显示器。我想我想只用 eventType 调用 .off() 并删除所有回调。
javascript - 如何处理访问 javascript 中的数据结构的两个回调?
更新2: 我认为这是一个更好的解释:
我有两个回调,每个都在填充一个数组。我想以某种方式合并这些数组。天真的方法是等到数组被填满,然后与 for 循环合并。我不能这样做,因为没有真正的方法来检查回调是否“完成”。
下一步可能是这样的:每次回调下载对象时,它都会检查合并数组(称为混合),并查看它是否包含“伙伴”对象。如果是:则合并到该伙伴对象中。如果没有,则插入该对象。
我担心竞争条件:回调 1 看到数组为空,决定插入其中,但随后控制切换到回调 2,它首先插入。回调 1 现在应该合并而不是插入,但是当控制切换回来时,它会插入。
如果我可以制作一个原子的“检查和插入/合并”代码块,那么可能会有所帮助。有没有办法做到这一点?
更新 1: 现在有代码,还有更多文字!
谢谢大家的回复。我去尝试尽可能地简化代码。
字:
我有一个名为混合的数组。Mixed 应该以:所有类型 (A) 的对象结束,并且如果它们具有类型 (B) 的模拟对象(也称为“私有”),则它们应该被合并。
这意味着使用两个使用回调的函数 - getAllA 和 getAllB。现在,我同时调用两者,手动稍等片刻,然后运行一个 for 循环来进行合并。
我需要做的是编辑我的代码,以便合并发生在回调中。但是,我想不出一种不产生竞争条件的方式来进行合并。
天真地,我可能想先用 A 类型的对象填充混合,然后遍历 B 对象并根据需要合并它们。但是,我不能这样做,因为无法查看您是否在 firebase 中使用 on("contact_added") 完成了操作。我想我想要的是一个并发数组结构,但我不知道如何使用内置的。我担心自己做,因为我不知道如何检查我是否做错了。比赛条件就是这样棘手。
现在,代码: 以下是您需要参考的脚本:
这是我粘贴到 javascript 控制台中的内容:
我想要做的是将逻辑从 for 循环移动到回调中,因为如果你立即运行 for 循环,数组将不会通过回调完成下载。
旧条目:
我有两个回调访问 Firebase 上的数据列表。
回调 1 获取类型 A 的对象。回调 2 获取类型 B 的对象。
我的目标 - 拥有一个正确合并 A 和 B 类型对象的数组。
大多数(但必须是所有)类型 B 的对象都有一个类型为 A 的“伙伴”对象。少数类型 A 的对象有一个类型为 B 的伙伴对象。
对于从 Firebase 中提取的每个对象,我想看看他们的伙伴是否在数组中。如果没有,则插入。如果是这样,则改为与合作伙伴“合并”。
如果没有并发数据结构,我想不出办法来做到这一点 - 但我不知道如何在 Javascript 中做到这一点。
我怎样才能创建那个并发数组,或者想办法以其他方式实现我的目标?