2015-03-13 9 views
0

Я пытаюсь запустить async действие в игровой системе и используя реактивный монго для операций с базами данных. Реактивные результаты возвращения манго в Future объектов. Но когда я возвращаю результаты Future в действие, я получаю ошибку времени компиляции. Play и Scala для меня новые, и до сих пор не получается, какова реальная проблема ?. У меня есть еще один код, код работает успешно.Playframework 2.3x: scala.concurrent.Future [play.api.mvc.Result]) play.api.mvc.Action [play.api.mvc.AnyContent]

Рабочий код: Код

def dashboard = Action.async{ 
    logger.info("In dashboard controller method"); 

    var cursor: Cursor[Playlist] = playlistCollection.find(Json.obj("isPublished"-> true)).sort(Json.obj("htiCount"-> -1)).cursor[Playlist]; 
    val playlistList : Future[List[Playlist]] = cursor.collect[List](); 
    playlistList.map { users => Ok(Json.toJson(users)) } 

}

Ошибка:

def playlistVideos(plalistId: String) = Action.async{ 
    logger.info("In playlistVideos controller method"); 

    var objectIds: List[JsObject] = CustomUtility.convertStringIdToJsonCriteria(List{plalistId}); 
    var query = Json.obj("_id" -> Json.obj("$in" -> objectIds)) 
    val cursor: Cursor[Playlist] = playlistCollection.find(query).cursor[Playlist]; 
    val futurePlayList: Future[Option[Playlist]] = cursor.headOption; 
    var bsonIds: Future[List[BSONObjectID]] = futurePlayList.map { option => { 
     var playlist: Playlist = option.get; 
     var optionVideos: Option[List[BSONObjectID]] = playlist.linkedVideoIds; 
     optionVideos.getOrElse(List[BSONObjectID]()); 
    }} 

    bsonIds.map { ids => { 
    var videosList: List[String] = ids.map { idObj => idObj.stringify } 
    var videosIds:List[JsObject] = CustomUtility.convertStringIdToJsonCriteria(videosList); 

    query = Json.obj("linkedVideoIds" -> Json.obj("$in" -> objectIds)); 
    val videosCursor: Cursor[Video] = videosCollection.find(query).cursor[Video]; 
    val futureVideos: Future[List[Video]] = videosCursor.collect[List](); 

    futureVideos.map { videos => Ok(Json.toJson(videos)) } 
    }} 
} 

Ниже моя ошибка компиляции раз.

overloaded method value async with alternatives: [A](bodyParser: play.api.mvc.BodyParser[A])(block: play.api.mvc.Request[A] ⇒ scala.concurrent.Future[play.api.mvc.Result])play.api.mvc.Action[A] <and> (block: play.api.mvc.Request[play.api.mvc.AnyContent] ⇒ 

scala.concurrent.Future[play.api.mvc.Result])play.api.mvc.Action[play.api.mvc.AnyContent] <and> (block: ⇒ scala.concurrent.Future[play.api.mvc.Result])play.api.mvc.Action[play.api.mvc.AnyContent] cannot be applied to (scala.concurrent.Future[scala.concurrent.Future[play.api.mvc.Result]]) 

ответ

2

bsonIds - будущее и будущееВидео также будущее, поэтому последняя строка будет Future [Future [_]].

Меняет, bsonIds.map { ids => к bsonIds.flatMap{ ids =>

+0

Привет @SKarthik раз спасибо вам. Это работа для меня. Пожалуйста, предложите мне, откуда я могу учиться хорошо, играть и скала? –

+0

Ссылка на эту страницу для scala: http://danielwestheide.com/scala/neophytes.html. также узнайте о имплицитах, Монадах и для понимания с монадами. –

+0

Спасибо @ S Karthik и где я нашел хорошие знания для Play? –