我只想问一下firebase检索数据。如何处理firebase检索数据完成?我没有看到任何完成处理程序。 我想在这个firebase数据检索完成后调用一些函数。我该怎么办?
DataService.ds.POST_REF.queryOrderedByChild("created_at").observeEventType(.ChildAdded, withBlock: { snapshot in
if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
let postKey = snapshot.key
let post = Post(postKey: postKey, dictionary: postDict)
self.posts.append(post)
}
})
答案 0 :(得分:5)
在Firebase中,并没有真正的“完成”概念。 (当听到&#39;孩子添加&#39;)时。它只是一个数据流(想象有人在初始数据完成之前添加了一条新记录)。您可以使用&#39;值&#39;获取整个对象的活动,但不会像他们添加的那样添加新记录,例如“添加的儿童”。确实
如果您确实需要使用已添加的子项并在可能完成时收到通知,则可以设置计时器。我不太了解,但这是逻辑。
当新数据停止进入时,定时器将停止扩展,finsiLoading()将在500ms后调用。
500毫秒只是一个编号,使用任何适合。
答案 1 :(得分:1)
将整个代码块写入一个具有完成处理程序的函数中,如下所示:
func aMethod(completion: (Bool) -> ()){
DataService.ds.POST_REF.queryOrderedByChild("created_at").observeEventType(.ChildAdded, withBlock: { snapshot in
if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
let postKey = snapshot.key
let post = Post(postKey: postKey, dictionary: postDict)
self.posts.append(post)
}
completion(true)
})
}
然后在某处调用它:
aMethod { success in
guard success == true else {
//Do something if some error occured while retreiving data from firebase
return
}
//Do something if everything went well.
.
.
.
答案 2 :(得分:0)
对SingleEventOfType(.Value)执行一次请求。这将一次性为您提供所有信息,允许您在获得该数据后执行您想要完成的任何功能。
您可以为childAdded创建单独的查询,然后在添加新帖子时执行您想要执行的任何操作