現在,我很迷惑firebase,觀察使用childAdded數據事件類型。我之所以使用childAdded來觀察我的firebase,是因爲我想讓我的列表頁面動態 firebase是否有新的數據插入。如何檢測firebase觀察childAdded是否在達到queryLimit時停止調用?
而我的問題是如何知道觀察到達queryLimit時停止調用?因爲我有一個指標,我想在達到queryLimit時關閉它。
我的火力點以下結構:
root {
talkID1(id by auto create) {
attribute1 ...
attribute2 ...
attribute3 ...
time
}
talkID2(id by auto create){
...
time
}
... // many talk ID which auto create by firebase
}
正如我所知道的,如果用childAdd將觀察,數據將一個孩子的孩子在通話將數據傳回。所以如果我有N數據在firebase,我想它會叫N < = 5次,對不對?
我完成如下處理:
func receiveIfExist(completion: @escaping (_ data: (My data type) -> Void) {
let requestWithQuery = Database.database.reference().child("root").queryOrdered(byChild: "time")
requestWithQuery.queryLimited(toLast: 5).observe(.childAdded, with: { (snapshot) in
guard let value = snapshot.value as? [String: Any] else { return }
self.getSingleTalkInfo(key: snapshot.key, value: value, completion: { (data) in
completion(data)
})
})
}
我打電話receiveIfExist此功能在viewDidLoad中()。
override func viewDidLoad() {
super.viewDidLoad()
self.myIndicator.startAnimating() // start running indicator
self.receiveIfExist { (data) in
self.handleTalk(with: data) // do something with request data
self.myIndicator.stopAnimating() // WEIRD!!!! Please look comments below
/*
I think it can not be added here because this completion will call N<=5 times just what I said before.
I think it should detect what my queryLimit data is and check the request data is this queryLimit data or not.
If yes then stop indicator animating, if not then keep waiting the queryLimit reach.
*/
}
}
如何檢測觀察是否達到queryLimit?
如果我能檢測到,那麼當它到達時我可以關閉我的指示器。
謝謝!
謝謝您回覆。但我有一個問題,就是你在第二點中所說的「如果我的根中只有兩條記錄,那麼它會被觸發兩次?」如果是這樣,這行「self.index = self.index + 1」只會被調用兩次,並導致limitCount的總和只有2? – Kevin
它可能會導致limitCount只有2,並可能不會阻止myIndicator,對不對? – Kevin
@Kevin是的你是對的,我認爲我們不能真正知道記錄的數量,所以上面的解決方案是部分正確的我想,我沒有嘗試過,請嘗試它並分享輸出,你學到了什麼,謝謝 – 3stud1ant3