2016-06-09 55 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) 
}