检索好友列表信息的最佳实践。如何检测多个查询是否完成?

Best practice to retrieve list of friends information. How to detect multiple queries are finished?

我有这样的用户结构:

{ 
  "users": {
    "uniqueID1": {
        "name": "Anon",
        "friends": {
            "uniqueID2": true,
            "uniqueID3": true
        }
    }
    "uniqueID2": { },
    "uniqueID3": { },
  }
}

我想显示用户朋友的名字。我必须访问 $user/friends/ 以获取唯一 ID 列表,并迭代该列表以获取朋友的信息。但是迭代唯一 ID 会进行多次查询,我必须始终检查是否所有查询都已完成。根据文档,似乎多个查询不会对性能产生太大影响,但如果我只想在所有查询完成后更新我的视图,我必须检查完成了多少查询。

有没有办法'execute a completion block when all queries are finished'?

伪代码

var totalNumOfFriends = 0
var tempArray = NewArray()

ref(/users/uniqueID1/friends).observeEventType{ snapshot

   var uIDList = snapshot.children's keys
   totalNumOfFriends = uIDList .count

   for uID in uIDList {
     var nameRef = ref(/users/uID/name)    i.e. /users/uniqueID3/name

     nameRef.observeSingleEventOfType { snapshot
           var username = snapshot.value
           tempArray.append(username)

           if tempArray.count == totalNumOfFriends {
              // If counts are the same, tempArray has all of my friends' names
              // Now update view using tempArray
           }
     }
  }
}

伪代码解释:

  1. /users/uniqueID1/friends

  2. 获取唯一 ID 列表
  3. 'Save' 个唯一 ID。 (在步骤 4 中解释)

  4. 对于列表中的每个唯一 ID,像这样使用 ref 获取用户名 /users/uniquedID2/name

  5. 对于每个检索到的名称,将其添加到临时数组中。一旦临时数组的计数等于第 2 步中的计数,更新我的视图,因为我已检索到所有名称。

Firebase 没有内置方式在多个查询完成时发出信号。但是您可以在自己的代码中轻松实现这一点。您使用计数器检查已经加载了多少项目的方法是最常见的方法。