Firebase-javascript API 仅在一个触发器中获取满足条件的数据节点.还会为每个查询建立新的 TCP
Firebase-javascript API get data-nodes satisfying a condition in one trigger only. Also does the makes new TCP connection for each query?
这里也有类似的问题。但是它与REST有关,我想问一下javascript-API。我的情况也有点不同。所以也许有人可以提出其他解决方案。我想执行类似于以下内容的查询:
"SELECT * FROM db.table WHERE field1 ="val1";"
使用火力基地,我们可以执行以下操作:
var ref = new Firebase("https://db.firebaseio.com/table");
ref.orderByChild("field1").equalTo("val1").on("value", function(record) {
console.log(record.val())
});
因此,Firebase 会为每个满足 field1="val1" 的孩子触发我的回调函数。它是否为每个 chlid 查询打开新的 TCP 连接?还有没有办法让所有的孩子一次性满足条件(也就是说,当所有孩子都下载到客户端时,会触发一个回调)。
所以 firebase 会为每个满足 field1="val1" 的孩子触发我的回调函数
不完全是。它只触发一次回调函数,在 DataSnapshot 参数中传递所有匹配的节点。您可以使用以下命令循环访问它们:
var ref = new Firebase("https://db.firebaseio.com/table");
ref.orderByChild("field1").equalTo("val1").on("value", function(snapshot) {
snapshot.forEach(function(record) {
console.log(record.val())
});
});
即使只有一个孩子,也需要循环。可以使用snapshot.numChildren()
来确定是否有任何节点与查询匹配。
它是否为每个 chlid 查询打开新的 TCP 连接
不。Firebase 客户端会在您首次调用 new Firebase(...)
时建立 WebSocket 连接。之后,所有通信都通过该WebSocket进行。只有当环境不支持 WebSockets 时,Firebase 才会回退到 HTTP 长轮询。查看浏览器调试器的"网络"选项卡,了解线路上发生的情况。这是相当有教育意义的。
还有没有办法让所有的孩子一次性满足条件(也就是说,当所有孩子都下载到客户端时,会触发一个回调)。
我想我已经回答了这个问题。
根据评论进行更新
传递给 forEach 的回调函数是否同步调用?
是的
相关文章:
- 将节点数据分配给另一个变量jstree
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 如何将数据添加到json的子节点
- Firebase-返回用户uid并将用户元数据值设置为不同的节点
- 如何将数据POST到节点服务器并从中获取responseText
- 通过 AJAX 发送表单,HTML 节点选择用于数据发送
- 跨节点服务器上的多个 API 请求维护数据
- 节点.js 如何通过基本 Passport 在数据会话中维护所需的数据.js
- 节点.js 不等待数据
- 在 vis 中访问节点数据.js单击处理程序
- jQuery或JS代码,用于获取网页中当前选定的表单项/文本/图像的确切节点数据
- 如何从d3节点数据中获取dom-svg元素
- 如何为php中现有的子节点数据创建警报消息
- 如何测试节点数据分块功能
- 按类型使用最低的's节点数据
- 如何在JavaScript中获取节点数据,如内联样式和方向等
- 从节点数据采集到浏览器的数据传输
- 如何获取GOJS中模板内的节点数据
- 如何使用xmlhttprequest使一个新的子节点与php脚本中的节点数据一起出现在html中
- D3选择更改节点数据