I am trying to use a semaphore to force synchronisation of a Firebase data query so that I can check for an existing item already in the database.
This is the code I have tried to retrieve a snapshot and check for duplicate:
let sem = dispatch_semaphore_create(0)
self.firDB.child("sessions").observeSingleEventOfType(.Value, withBlock: { snapshot in
snap = snapshot
dispatch_semaphore_signal(sem)
} )
// semaphore is never asserted
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER)
var isDuplicate : Bool
repeat {
sID = genCode()
isDuplicate = snap.hasChild(sID)
} while isDuplicate
In this case I need to wait for a snapshot to return before the isDuplicate
loop, but the semaphore is never fired from the observeSingleEventOfType
block.
Any suggestions greatly appreciated.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…