Dies spricht nur für die asynchrone Natur von FRP und RAC. Ein Beispiel wäre, große Datenmengen von einer API zu holen und etwas mit den Antworten zu tun.
dies ist der Zweck der flatMap
und die FlattenStrategy
Methoden (.Latest
finden Sie die Daten in der Reihenfolge bekommen es in kommt, .Concat
Auftrag erhalten wird)
Ein Beispiel wäre ein Array von Objekten werden abruft. .Latest
wird jedes Objekt zurückgeben, so wie es empfangen wird. .Concat
wird das Array von Objekten in der ursprünglichen Reihenfolge zurückgeben. Wenn ein Objekt lange zum Herunterladen benötigt, wartet das System darauf, bevor es zu den anderen Objekten weitergeht.
Ein weiteres Beispiel einige JSON wird immer und Handhabung es entsprechend:
func getData() -> SignalProducer<NSDictionary, NSError> {
return SignalProducer { observer, _ in
let data = someAsyncNetworkRequestFuncThatReturnsJSON()
let newData = unpackJSONToDict(data)
observer.sendNext(newData)
observer.sendCompleted()
}
.flatMap(FlattenStrategy.Latest, transform: dataHandler)
}
func unpackJSONToDict(data: JSON) -> NSDictionary {
/// deal with JSON data and return desired data as NSDictionary
}
func dataHandler(dict: NSDictionary) -> SignalProducer<NSDictionary, NSError> {
/// do something with dict
}