2017-06-27 27 views
0

我是新来的couchbase。我在scala上使用它的java sdk。基本上我想要异步执行一个查询和未来的结果映射到对象(例如事务处理)在scala上使用couchbase java api:异步选择查询和映射结果

我有这样的代码片段:

val query= N1qlQuery.simple(s"SELECT * FROM `transaction` $whereClause $orderByClause LIMIT $itemsPerPage OFFSET $offset") 


    val promise= Promise[Seq[Transaction]]() 

    println("****asyncSearch query=" + query) 

    bucket.async().query(query).flatMap(new Func1[AsyncN1qlQueryResult, Observable[AsyncN1qlQueryRow]](){ 
     override def call(result: AsyncN1qlQueryResult):Observable[AsyncN1qlQueryRow]= { 
     println("****asyncSearch flatMap=" + result) 
     result.rows() 
     } 
    }).map[Transaction](new Func1[AsyncN1qlQueryRow, Transaction](){ 
     override def call(result: AsyncN1qlQueryRow):Transaction= { 
     println("****asyncSearch map=" + result) 
     result.value().toString : Transaction 
     } 
    }).scan(List[Transaction](), new Func2[ List[Transaction], Transaction, List[Transaction] ](){ 
     override def call(accumulated: List[Transaction], current: Transaction): List[Transaction]= { 
     println("****asyncSearch scan=" + current) 
     accumulated ::: List(current) 
     } 
    }).subscribe(new Action1[List[Transaction]](){ 
     override def call(result: List[Transaction]):Unit= { 
     println("****asyncSearch subscribe=" + result) 
     promise.success(result) 
     } 
    }) 

    promise.future 

不过,我只能够看到打印的“ **** asyncSearch query = ...“和”**** asyncSearch subscribe = List()“。正如你所看到的,我的最终结果是空的,但我在Couchbase Web控制台中执行了相同的查询,并且我得到了结果。所以在代码中一定有错误,因为我没有看到“**** asyncSearch flatMap = ...”“**** asyncSearch scan = ...”的打印件等。

有人可以帮忙我用我的代码?提前致谢。

回答

0

我不知道你需要所有这些new Func1的 - 这更多的Java风格,因为Java不支持/不支持lambda表达式。尝试这样的:

...(query).flatMap(result => { println("res"+result); result.rows()) 

一旦这回来确定可能开始链接其他块类似的风格。

参见http://reactivecouchbase.org/

+0

我尝试过斯卡拉风格的语法,但它给我的编译错误。可能是因为我在Scala内部使用了正式的Java Sdk(由Couchbase在他们的站点中认可)。我看着使用反应式couchbase api,但我认为它还没有生产。因此,使用Java样式代码现在是我的首选选项 – loydedano

+0

您是否特别想使用Observables?似乎将异步查询从此处转换为https://developer.couchbase.com/documentation/server/3.x/developer/java-2.1/java-intro.html到Scala会更容易,而不是使事情变得复杂.. – jsdeveloper

+0

你是否特意使用Observables?似乎将异步查询从此处转换为https://developer.couchbase.com/documentation/server/3.x/developer/java-2.1/java-intro.html到Scala会更容易,而不是使事情变得复杂.. – jsdeveloper