我向Firebase数据库发出了几个请求,这些请求包含在signalProducer中,如下所示:
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 :(得分: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)
}