3 ms·
OK. Something like: val fNotifications: Future[List[Notification]] = // get notifications from the database val fPosts: Future[List[Post]] = // get posts f
by hythloday 13y ago
OK. Something like:
val fNotifications: Future[List[Notification]] = // get notifications from the database
val fPosts: Future[List[Post]] = // get posts from a different database
// If getting notifications fail, log the error and pretend there are no notifications
val safeNotifications = fNotifications rescue { t: Throwable => log.error(t); Future(Nil) }
// If getting posts fails, log the error and try retrieving stale posts from the cached post server
val safePosts = fPosts rescue { t: Throwable =>
log.error(t)
// If the cached post server fails too, just pretend there are no posts
cachedPostsDatabase.getForCurrentUser rescue { t: Throwable => log.error(t); Future(Nil) }
}
val facebookPage: Future[Page] = for {
notifications: List[Notification] <- safeNotifications
posts: List[Post] <- safePosts
} yield {
// Code here executes when both/all outer futures are ready
renderFBPage(notifications, posts)
}
// We can return the future or call more rescues on it or combine it with more futures
is a thumbnail sketch of how you'd implement the facebook timeline in Scala if you were doing so. There are even better abstractions that I've started using (functional reactive programming specifically) but none of them come with the standard library, so I thought that was a bit unfair.