0
我使用firebase 3啓動了我的Web應用程序,並在angularjs 1.5中啓動。我現在要爲我的Web App創建一個IOS應用程序。該應用程序是一個時鐘系統,用戶可以檢查或檢查他的工作時間。如何在Firebase 3和Swift 3(停止觀察者)中檢索一次數據
爲了使這個簡單,我有這樣的表中火力點:
worktimes
-Kd4swkAQJTRjCbD0CCy
+ ----- IN | '2017-02-16 10:00:00'
+ ----- OUT | '2017-02-16 13:00:00'
案例:
- 如果用戶有 「OUT」 的值,創建一個新的工作時間。
- 如果用戶在「OUT」中沒有值,如NULL,我想更新 「OUT」並設置當前時間戳。
在JS,我的代碼看起來是這樣的:
var database = firebase.database();
var ref = database.ref().child('worktimes')
查詢語言(Javascript):
ref
.startAt('2017-02-16 00:00:00')
.endAt('2017-02-16 23:59:59')
.orderByChild('timestamp')
.limitToLast(1)
.once('value', function(snapshot) {
// Getting data once here
})
查詢(SWIFT 3):
ref
.queryStarting(atValue: "2017-02-16 00:00:00")
.queryEnding(atValue: "2017-02-16 23:59:59")
.queryOrdered(byChild: "timestamp")
.queryLimited(toLast: 1) // return only the latest entry
.observe(FIRDataEventType.value, with: { (snapshot) in
if !snapshot.value is NSNull {
// work here with the data once
for child in snapshot.children {
// if I do an update here like this:
let snap = child as! FIRDataSnapshot
let dict = snap.value as! [String: AnyObject]
let id = dict["id"] as! String
let IN = dict["in"]
let OUT = dict["out"]
if(OUT == nil){
// UPDATE QUERY
// If I update here my Data, the query ends and starts again.
ref.child("-Kd4swkAQJTRjCbD0CCy").updateChildValues(["timestamp" : "2017-02-"])
} else {
// creating new worktime here..
}
} // end of for
} // end of if
})
正如我寫的在註釋中(請參閱更新查詢後),該快照最終結束,但它通過快照再次循環。我已經想通了,因爲數據已經改變,它再次觸發循環。
我已經與
ref.removeAllObservers()
試圖刪除觀察者。它工作正常,但如果我嘗試更新後查詢它不起作用。它創建一個永不停止的循環。我怎樣才能停止觀察,我不需要檢查新的更新。
提前致謝!
感謝夥計!我已經嘗試過觀察SingleEvent,它沒有工作。但是我現在在你的評論中看到,我錯過了參數中的「:」。它現在有效! –
太棒了!很高興爲你工作 –