Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在scala上使用couchbase java api:异步选择查询和映射结果_Java_Scala_Couchbase - Fatal编程技术网

在scala上使用couchbase java api:异步选择查询和映射结果

在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

我是couchbase的新手。我在scala上使用它的JavaSDK。基本上,我希望异步执行一个查询,并将未来的结果映射到一个对象(例如事务)

我有以下代码片段:

   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比将事情复杂化更容易。。