scala - How to traverse a Set[Future[Option[User]]] and mutate a map -
i have mutable map contains users:
val usermap = mutable.map.empty[int, user] // int user.id now need load new users, , add them map. have following api methods:
def getnewusers(): seq[int] def getuser(userid: int): future[option[user]] so first users need load:
val newuserids: set[int] = api.getnewusers i need load each user, not sure how getuser returns future[option[user]].
i tried this:
api.getnewusers().map( getuser(_) ) but returns set[future[option[user]]]
i'm not sure how use set[future[option[user]]] update usermap now.
you'll have wait of futures finish. can use future.sequence transform set[future[_]] future[set], can wait them finish:
val s: set[scala.concurrent.future[some[user]]] = set(future(some(user(1))), future(some(user(2)))) val f: future[set[some[user]]] = future.sequence(s) f.map(users => users.foreach(u => /* code here */)) however, using mutable map may dangerous because it's possible open race conditions. futures executed in different threads, , if altering mutable object's state in different threads, bad things happen.
Comments
Post a Comment