2016-06-09 56 views
0

我有几个要求我的火力地堡的数据库是包含在这样一个signalProducer:Reactivecocoa:等待几个火力点请求完成(SWIFT)

static func parseOne(snap: FIRDataSnapshot) -> SignalProducer<FUser, NSError> { 
    return SignalProducer { subscriber, disposable in 
     let ref = FIRDatabase.database().reference() 
     let objRef = ref.child(FUser.URL + "/" + snap.key) 
     objRef.observeSingleEventOfType(.Value, withBlock: { (snap) in 
      let user = FUser(snap: snap) 
      subscriber.sendNext(user) 
      subscriber.sendCompleted() 
     }) 
    } 
} 

我想能够调用几个他们同时等待所有完成之前做一些事情。

Reactivecocoa有没有办法解决这个问题?或者我在错误的方向与signalProducer?

+0

见http://stackoverflow.com/questions/38288161/fetch-data-from-firebase-by-joining-tables-in-ios –

回答

0

这是reactivecocoa擅长的事情 - 并且有一个内置的运算符combineLatest,它完全符合您的要求。例如parseMany功能会是这个样子:

func parseMany(snaps: [FIRDataSnapShot]) -> SignalProducer<[FUser], NSError> { 
    let parseOneSignals = snaps.map(parseOne) //array of FUser signal producers 
    return combineLatest(parseOneSignals) //signal producer that sends .Next(arrayOfAllFUsers) when all the parseOneSignals have sent their .Next(singleFUser) 
}