2016-06-09 11 views
0

Ich benutze playframework mit "org.mongodb.scala" %% "Mongo-scala-Treiber" % "1.0.1" und diesen Code haben:Abonnieren Abfrage mongo funktioniert nicht

val collection = Mongo.db.getCollection("regionAuth") 

    def getRegions = { 

    val find: Observable[Document] = collection.find() 

    Logger.info("regions searching") 

    find.subscribe(new Observer[Document] { 

     override def onError(e: Throwable): Unit = Logger.error("regions error", e) 

     override def onSubscribe(subscription: Subscription): Unit = Logger.info("subscribed") 

     override def onComplete(): Unit = Logger.info("regions done") 

     override def onNext(result: Document): Unit = Logger.info("region accepted") 
    }) 

    find.map { region => 
     Logger.info("region accepted by map") 
     region 
    } 

    find.foreach(_ => Logger.info("region accepted by foreach")) 

    find.toFuture().onComplete { 
     case Success(r) => Logger.info("regions accepted as future seq " + r.size) 
     case Failure(e) => Logger.error("regions error as future", e) 
    } 

    find 
    } 

Und es Drucke:

[info] Anwendung - Regionen suchen

[info] Anwendung - abonniert

[info] Anwendung - Region von foreac akzeptiert h

[info] Anwendung - akzeptiert Region von foreach

[info] Anwendung - Region von foreach akzeptiert

[info] Anwendung - Regionen als zukünftiger seq akzeptiert 3

Warum abonnieren 's Veranstaltungen und Karte nicht funktionieren?

+0

Oder Sie können sich https://github.com/sgodbillon/reactivemongo-tailablecursor-demo ansehen – cchantep

Antwort

0

Ich hoffe, es ist nicht zu spät. Wenn es sich um eine eigenständige Anwendung handelt, in der nichts anderes ausgeführt wird, müssen Sie warten, bis die Zukunft abgeschlossen ist.

... 
val future = find.toFuture() 
future.onComplete { 
    case Success(r) => Logger.info("regions accepted as future seq " + r.size) 
    case Failure(e) => Logger.error("regions error as future", e) 
} 

scala.concurrent.Await.result(future) 
find