问题标签 [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.

0 投票
3 回答
22456 浏览

javascript - 使用 Firebase 的数据库式查询

有没有一种使用 Firebase 执行数据库样式查询的快速方法?

例如:

users给定带有字段user_idname和的 firebase 引用age,执行类似于此的查询的最佳方法是什么:

0 投票
3 回答
7922 浏览

firebase - Firebase 中的记录总数(我什么时候完成计数?)

计算表中的记录显然是一项手动工作,直到你们获得一些已经在工作中的漂亮新功能;)

但是,即使使用带有 .on('value', ...) 的手动运行来获取计数,我也会坚持下去:

我预见到任何类型的分页都会出现同样的问题,我觉得我对此有点呆滞。我错过了什么?

例如,对于获取用户在他/她的队列中的消息数量,这从根本上来说是错误的模式吗?

0 投票
1 回答
964 浏览

javascript - Firebase child_added

我的应用程序现在可以运行,但我不确定它为什么会运行...

我有一些类似的代码:

问题是当我稍后尝试使用itemRef它时它不起作用。然而,我花了几个小时才意识到引用不起作用,因为itemRef.name()返回了正确的引用名称。

在搜索 API 时,我遇到了该.ref()函数。API 声明.ref()返回“生成此 DataSnapshot 的位置的 Firebase 参考”。这使该功能对我来说完全没有意义,但我决定尝试一下:

谁能向我解释为什么.ref()我的参考工作只是返回“生成此 DataSnapshot 的位置的 Firebase 参考”。??

0 投票
1 回答
1865 浏览

firebase - Firebase child_removed 未被调用

这是我的代码的基本思想。我从我的实际代码中删除了很多额外的东西,但它主要是 css - 它都不应该对此产生任何影响......

问题是,$("#button")点击时,itemRef 会从 Firebase 中的 listRef 中删除,但该'child_removed'事件永远不会触发......如果我取出

然后child_removed被称为...

其他一切正常 -$("#name")已更新,alert()我用来测试它的所有对话框都工作正常 - 唯一的问题是child_removed没有被调用。

0 投票
3 回答
11267 浏览

javascript - 在函数中处理异步调用 (Firebase)

现在我多次遇到使用 Firebase 的同步和异步函数的问题。我的问题通常是我需要在我编写的函数中进行异步 Firebase 调用。举个简单的例子,假设我需要计算和显示一个物体的速度,并且我的 Firebase 存储了距离和时间:

当然,上面的代码是行不通的,因为firebaseRef.once()是异步调用,所以velocity我们到达的时候还没有设置return velocity;。如果我们将其return放在.on()回调函数内部,则根本不会返回任何内容。

一种解决方案是使我的calcVelocity()函数也异步。

另一种解决方案是存储 Firebase 的缓存版本,该版本同步读取但从 Firebase 异步更新。

这些解决方案中的一种是否比另一种更好?有没有更好的解决方案?

0 投票
2 回答
1535 浏览

javascript - Ajax / Firebase 仅适用于本地主机(同源策略?)

我有一个 Firebase 应用程序可以在 localhost 上完美运行,但是当我从外部访问它时(通过允许在我的路由器中进行端口转发)或当我将它上传到 Bluehost 时它不起作用。

此代码有效:

但这不会:

经过一些研究,我认为问题出在Same Origin Policy,因为 Firebase JS 包含的是

但我的 Firebase 参考已开启

我找到了一些解决此问题的方法,但想知道使用 Firebase 处理它的最佳方法(或者如果同源策略甚至是这里的问题)。

0 投票
2 回答
931 浏览

firebase - 添加到列表时类似于 Firebase 事务()的功能?

这是一个相当复杂的问题,但我会尽量简单明了地解释它......

我正在使用 Firebase 构建一个基于网络的多用户游戏。我保留了游戏中每一轮的列表。在一轮结束时,每个用户都会看到一个“开始”按钮,当他们准备好开始下一轮时,他们会单击该按钮。当至少 50% 的用户点击“开始”时,该回合开始。

我有一个gameRef游戏的 Firebase 参考,一个roundListRef代表轮次列表的参考,以及一个roundRef代表当前轮次的参考。

我附加了一个child_added回调,roundListRef以便在添加新一轮时,它成为每个人的当前轮:

我可以从那里轻松跟踪newRoundVotesactivePlayers计算 50%。如果达到50%,则增加一个新的回合,触发每个人的child_added事件,新的回合将从那里开始……

我的问题是,我如何确保只添加一个新回合,并且每个人都在同一回合中?

例如,假设有 10 名玩家和 4 人已经投票开始下一轮。如果第 6 位玩家在第 5 位玩家触发他的事件之前投票child_added,则也将为第 6 位玩家添加一轮。

问题类似于.set()vs .transaction(),但不完全相同(根据我的理解)。

有没有人有办法解决吗?

0 投票
5 回答
51457 浏览

firebase - Firebase child_added 只添加孩子

从 Firebase API:

已添加子节点:该位置的每个初始子节点都会触发一次此事件,每次添加新子节点时都会再次触发该事件。

一些代码:

但是由于这个位置的每个孩子都调用了一次函数,有没有办法只获取实际添加的孩子?

0 投票
2 回答
3581 浏览

firebase - 使用 .off 停用事件

我的大多数 .on 事件都使用闭包:

这意味着,无法使用 .off() 停用这些监视器,因为 off 需要原始回调指针以及 eventType。我怎么能做这种事情?

我的应用程序(jQuery Mobile)是基于页面的。当用户点击某个页面时,我想激活监视器。当用户离开该页面时,我想停用,所以当他们重新进入时,我不会有多个显示器。我想我想只用 eventType 调用 .off() 并删除所有回调。

0 投票
4 回答
3257 浏览

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 中做到这一点。

我怎样才能创建那个并发数组,或者想办法以其他方式实现我的目标?