Comment puis-je attendre que les tâches asynchrones se terminent en scala?

Je suis conscient que mon problème peut sembler un peu complexe. Mais je vais essayer de m'exprimer ainsi.

J'ai cette méthode qui je souhaite retourner un Map[String, List[String]] rempli avec des données.

def myFunction():Map[String, List[String]] = {

  val userMap = Map[String, String](("123456", "ASDBYYBAYGS456789"),
                                    ("54321", "HGFDSA5432"))

  //the result map to return when all data is collected and added
  val resultMap:Future[Map[String, List[String]]]

  //when this map is finished (filled) this map is set to resultMap
  val progressMap = Map[String, List[String]]()

  for(user <- userMap){

     //facebook graph API call to get posts.
     val responsePost = WS.url("async get to facebook url").get()

     responsePosts.flatMap { response => 
        val jsonBody = response.json
        val dataList = List[String]()

        for(i <-0 until 5){

           //parse the json-data to strings
           val messages = (jsonBody.\("statuses").\("data")(i).\("message"))
           val likesArray = (jsonBody.\("statuses").\("data")(i).\\("data")).flatMap(_.as[List[JsObject]])
           val likes = likesArray.length

           //Put post with likes in temporary list
           dataList ::=  ("Post: " + message.toString + " Likes: " + likes.toString)
        }  

           //facebook graph API call to get friends.
           val responseFriends = WS.url("async get to facebook url").get()

           responseFriends.map { response =>
               val jsonBody = response.json
               val friendCount = jsonBody.\("data")(0).\("friend_count").toString

               //add "Friends: xxx" to the dataList and add the new row to resultMap containig a list with post and friends.
               dataList ::= ("Friends: " + friendCount)
               progressMap += user._1 -> dataList

               //check if all users has been updated
               if(progressMap.size == userMap.size){
                  resultMap = progressMap
               }
            }
       }
    }

    //return the resultMap.
    return resultMap
 }
}

Mon code peut ne pas être écrit avec optimale de la syntaxe.

Mais ce que je veux est de retour cette resultMap avec des données.
Mon problème est que depuis le "get to facebook url" est fait de manière asynchrone ce resultMap est renvoyé à vide. Je ne veux pas de ce vide, bien sûr.

Ce code dans ma méthode c'est ma solution à ce jour. Il ne fonctionne pas, évidemment, mais j'espère que vous pouvez voir ce que je suis en train de faire. Se sentir libre de répondre avec vos pensées, même si vous n'êtes pas sûr, il peut me mettre sur la bonne voie.

source d'informationauteur raxelsson