Guest User

Untitled

a guest
Jan 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. def fetch(id: String): Future[Option[Record]] = Future {
  2. Thread sleep 100
  3. if (id != "b" && id != "d") {
  4. Some(Record(id))
  5. } else None
  6. }
  7.  
  8. def fetchRecordDetail(record: Record): Future[RecordDetail] = Future {
  9. Thread sleep 100
  10. RecordDetail(record.id + "_detail")
  11. }
  12.  
  13. def upload(recordDetail: RecordDetail): Future[UploadResult] = Future {
  14. Thread sleep 100
  15. UploadResult(recordDetail.id + "_uploaded")
  16. }
  17.  
  18. def notifyUploaded(results: Seq[UploadResult]): Future[Unit] = Future{ println("notified " + results)}
  19.  
  20. val result: Future[Unit] = //Final call to 'notifyUploaded' goes here
  21.  
  22. Await.ready(result, Duration.Inf)
  23.  
  24. val ids: Seq[String] = Seq("a", "b", "c", "d")
  25. def filterSome(s:String) = fetch(s) map ((s, _)) collect { case (s, Some(v)) => v }
  26. val validData = ids map filterSome
  27. Await.ready(Future.sequence(validData), Duration.Inf)
  28. val records = validData.map(_.value.get.toOption)
  29. val recordDetails = records.flatten map fetchRecordDetail
  30. Await.ready(Future.sequence(recordDetails), Duration.Inf)
  31. val uploadResult = recordDetails.map(_.value.get.toOption).flatten map upload
  32. Await.ready(Future.sequence(uploadResult), Duration.Inf)
  33. val seqUploadResult = uploadResult.map(_.value.get.toOption)
  34. val result: Future[Unit] = notifyUploaded(seqUploadResult.flatten)
  35. Await.ready(result, Duration.Inf)
Add Comment
Please, Sign In to add comment