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 = ...”的打印件等。
有人可以帮忙我用我的代码?提前致谢。
我尝试过斯卡拉风格的语法,但它给我的编译错误。可能是因为我在Scala内部使用了正式的Java Sdk(由Couchbase在他们的站点中认可)。我看着使用反应式couchbase api,但我认为它还没有生产。因此,使用Java样式代码现在是我的首选选项 – loydedano
您是否特别想使用Observables?似乎将异步查询从此处转换为https://developer.couchbase.com/documentation/server/3.x/developer/java-2.1/java-intro.html到Scala会更容易,而不是使事情变得复杂.. – jsdeveloper
你是否特意使用Observables?似乎将异步查询从此处转换为https://developer.couchbase.com/documentation/server/3.x/developer/java-2.1/java-intro.html到Scala会更容易,而不是使事情变得复杂.. – jsdeveloper