簡體   English   中英

在scala上使用couchbase Java api:異步選擇查詢和映射結果

[英]using couchbase java api on scala: async select query and mapping results

我是新來的沙發床。 我在scala上使用其Java SDK。 基本上我想異步執行查詢並將將來的結果映射到一個對象(例如事務)

我有以下代碼片段:

   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 subscription = List()”的打印內容。 如您所見,我的最終結果為空,但是我在Couchbase Web控制台中執行了相同的查詢,並且得到了結果。 因此,代碼中肯定有問題,因為我看不到“ **** asyncSearch flatMap = ...”“ **** asyncSearch scan = ...”等的打印內容。

有人可以幫我做我的代碼嗎? 提前致謝。

我不確定您是否需要所有這些new Func1是更多的Java樣式,因為Java不/不支持lambda表達式。 嘗試這樣的事情:

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

一旦多數民眾贊成恢復正常,也許開始以類似的風格鏈接其他塊。

另請參閱http://reactivecouchbase.org/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM