在scala上使用couchbase java api:异步选择查询和映射结果
我是couchbase的新手。我在scala上使用它的JavaSDK。基本上,我希望异步执行一个查询,并将未来的结果映射到一个对象(例如事务) 我有以下代码片段:在scala上使用couchbase java api:异步选择查询和映射结果,java,scala,couchbase,Java,Scala,Couchbase,我是couchbase的新手。我在scala上使用它的JavaSDK。基本上,我希望异步执行一个查询,并将未来的结果映射到一个对象(例如事务) 我有以下代码片段: val query= N1qlQuery.simple(s"SELECT * FROM `transaction` $whereClause $orderByClause LIMIT $itemsPerPage OFFSET $offset") val promise= Promise[Seq[Transaction
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=…”等的打印
有人能帮我写代码吗?提前谢谢。我不确定您是否需要所有这些
新功能1
,这更像是Java风格,因为Java不支持lambda表达式。试着这样做:
...(query).flatMap( result => { println("res"+result); result.rows() )
一旦它回来,好吧,也许开始用类似的方式链接其他块
另请参见我以前尝试过Scala风格的语法,但它给了我编译错误。可能是因为我在Scala中使用的是官方的JavaSDK(由Couchbase在其网站上支持)。我考虑过使用反应式couchbase api,但我认为它还没有做好生产准备。因此,使用Java风格的代码是我现在的首选选项。您是否特别希望使用可观察的对象?似乎将异步查询从这里转换为Scala会更容易,而不是使事情复杂化。您是否特别希望使用可观察对象?似乎将异步查询从这里转换为Scala比将事情复杂化更容易。。