Reactivecocoa:等待几个firebase请求完成(swift)

时间:2016-06-09 08:42:58

标签: swift firebase firebase-realtime-database reactive-cocoa-4

我向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的方向是错误的吗?

1 个答案:

答案 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)
}