[英]Is there a way in the Couchbase Java SDK to not list the nodes to connect to?
[英]What's the right way to use toBlocking() in Couchbase Java SDK?
Couchbase新手,使用Couchbase Server v4.0.0和Java SDK v2.2.3。 我有以下代碼用於運行查詢
Observable
.defer(new Func0<Observable<AsyncN1qlQueryResult>>() {
@Override
public Observable<AsyncN1qlQueryResult> call() {
return bucket.async().query(query);
}
})
.flatMap(new Func1<AsyncN1qlQueryResult, Observable<AsyncN1qlQueryRow>>() {
@Override
public Observable<AsyncN1qlQueryRow> call(AsyncN1qlQueryResult result) {
return result.rows();
}
})
.map(new Func1<AsyncN1qlQueryRow, JsonObject>() {
@Override
public JsonObject call(AsyncN1qlQueryRow row) {
return row.value();
}
})
.toList()
.toBlocking()
.firstOrDefault(null);
該query
應返回兩個結果,我可以保證它沒有任何問題。 但是,如果我讓它運行,則此表達式的值為空。 我懷疑我轉換為阻止可觀察對象的方式可能存在問題,或者可能是延遲。
一個有趣的觀察是,如果我在調試模式下運行它,並在return bucket.async().query(query);
行的return bucket.async().query(query);
處設置斷點return bucket.async().query(query);
每次使用調試器進行調試時,我總是得到一個包含2個元素的列表。 (這是查詢不是罪魁禍首的另一個證明。)
有人可以發現我的成語有什么毛病嗎?
盡管我不知道您的N1QL,請檢查以下內容:
Observable.defer()
開始; 只需從asyncBucket.query()
開始,因為asyncBucket.query(q)
或syncBucket.async().query(q)
已經以延遲方式實現。 singleOrDefault()
當用於相關toList()
(但是,在這種情況下,可能沒有關系。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.