【发布时间】:2015-12-25 16:57:40
【问题描述】:
我在两个用户下存储每条消息的副本 -
我有 2 个问题。 -
Q1 - 以有序方式提取 user1 和 user2 之间的聊天消息的查询,以便显示在个人聊天窗口中 -
我写了以下-
//refuser1 is firebase reference to "https://myapp.firebaseio.com/messages/user1"
var messages = [];
refuser1.orderByChild("from").equalTo("user1").once('value', function(s){
s.forEach(function(childsnap){
messages.push(s.val());
});
});
refuser1.orderByChild("from").equalTo("user2").once('value', function(s){
s.forEach(function(childsnap){
messages.push(s.val());
});
});
// Now messages array has all messages between user1 and user2 -
// add code to sort messages in array based on timestamp /
这是存储和检索个人一对一聊天数据的正确方法吗?
Q2 - 在检索数据时,'value' 和 'child_added' 事件的行为似乎不同 - 见下图 -
当我使用 'value' 时,我得到所有子对象,但是当我使用 'child_added' 时,我只得到 users1 中的第一个孩子。
该文档说 child_added 为每个初始孩子触发(假设这意味着在添加新孩子之前存在的所有孩子)
我的理解正确吗?我期待 'value' 和 'child_added' 的返回结果相同
【问题讨论】:
-
请复制/粘贴数据 - 屏幕截图很难处理。另外,格式化您的代码。值事件在节点上抓取所有内容并将其传递给应用程序。如果节点有 1000 个子节点,您将一次获得所有子节点 - 在代码中遍历它们。添加的事件在每个子节点上迭代一次,并将其传递给每个子节点的应用程序,然后它将通知应用程序添加的任何其他子节点。
-
另外:如果您有两个问题,请分别提出。这样:人们可以分别回答每个问题。
-
哦,您可能想查看一次(child_added)。这将导致添加一个子事件,然后事件侦听器将被删除,因此只会返回一个子事件。
-
答案如下。对于未来的问题:每个帖子坚持一个问题,不要使用文本截图。我现在必须在我的答案中输入一些模仿你的 JSON 的东西。如果您将 JSON 作为文本包含在内,我可以复制/粘贴它。以文本格式获取 JSON 的一种快速方法是使用 Firebase 仪表板中的“导出”按钮。
-
谢谢@FrankvanPuffelen。我为截图道歉,我以后会一直粘贴文字。