2016-10-03 6 views
0

를 사용하여 몽고 데이터베이스에 객체를 삽입하고, 여기 위치하고 데모 프로젝트에서 찾고있다 : 그러나 https://github.com/jonasanso/play-reactive-mongo-db내가 모두 함께 스칼라, MongoDB를하고 재생 프레임 워크를 사용하는 방법을 배우고 스칼라의 ReactiveMongo 드라이버

, I create() 메서드의 구문을 이해할 수 없습니다. 키워드 yield을 사용하지 않고 다른 방법으로 글을 쓸 수 있습니까? 스칼라를 배우는 중이며이 방법이 어떻게 작동하는지 이해할 수 없습니다. 당신이 수익률 구문을 사용하지 않으려면

def create(name: String, population: Int) = Action.async { 
    for { 
     cities <- citiesFuture 
     lastError <- cities.insert(City(name, population)) 
    } yield 
     Ok("Mongo LastError: %s".format(lastError)) 
    } 
+0

먼저 [문서] (HTTP를 읽기 : // reactivemongo. org/releases/0.11/documentation/index.html) – cchantep

답변

0

, 당신은 동등한 코드를 번역 할 수 있습니다 : 그것은 권장

citiesFuture 
    .flatMap (cities => cities.insert(City(name, population)) 
    .map (lastError => Ok(s"Mongo LastError: $lastError")) 
+0

좋습니다, 고마워요! 'flatMap()'을'map()'으로 대체 할 수 있을지 궁금 해서요? 아니면'flatMap()'을 사용해야 할 특별한 이유가 있습니까? 나는 여전히 다른 것을 사용할 때를 이해해야한다. – Calculus5000

+0

이 경우에는 [Future [String]]을 (를) 얻을 수 있기 때문에 flatMap 대신 여기에서 맵을 사용할 수 없습니다. 미래의 사슬을 만들려면 : 먼저 citiesFuture를 실행하십시오. future.insert (...)를 실행하는 것보다 flatMap을 사용해야합니다. 그리고 마지막으로 cities.insert 결과로 map을 사용하여 String 결과를 Play의 'Ok'로 변환 할 수 있습니다. – Nyavro