Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def fetch(id: String): Future[Option[Record]] = Future {
- Thread sleep 100
- if (id != "b" && id != "d") {
- Some(Record(id))
- } else None
- }
- def fetchRecordDetail(record: Record): Future[RecordDetail] = Future {
- Thread sleep 100
- RecordDetail(record.id + "_detail")
- }
- def upload(recordDetail: RecordDetail): Future[UploadResult] = Future {
- Thread sleep 100
- UploadResult(recordDetail.id + "_uploaded")
- }
- def notifyUploaded(results: Seq[UploadResult]): Future[Unit] = Future{ println("notified " + results)}
- val result: Future[Unit] = //Final call to 'notifyUploaded' goes here
- Await.ready(result, Duration.Inf)
- val ids: Seq[String] = Seq("a", "b", "c", "d")
- def filterSome(s:String) = fetch(s) map ((s, _)) collect { case (s, Some(v)) => v }
- val validData = ids map filterSome
- Await.ready(Future.sequence(validData), Duration.Inf)
- val records = validData.map(_.value.get.toOption)
- val recordDetails = records.flatten map fetchRecordDetail
- Await.ready(Future.sequence(recordDetails), Duration.Inf)
- val uploadResult = recordDetails.map(_.value.get.toOption).flatten map upload
- Await.ready(Future.sequence(uploadResult), Duration.Inf)
- val seqUploadResult = uploadResult.map(_.value.get.toOption)
- val result: Future[Unit] = notifyUploaded(seqUploadResult.flatten)
- Await.ready(result, Duration.Inf)
Add Comment
Please, Sign In to add comment