1
Couchbase菜鳥在這裏,使用Couchbase Server v4.0.0和Java SDK v2.2.3。我有下面的代碼運行一個查詢什麼是在Couchbase Java SDK中使用toBlocking()的正確方法?
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);
處設置一個斷點並每次使用調試器跳過它,我總會得到一個包含2個元素的列表。 (只是另一個證明,查詢不是罪魁禍首。)
有人可以發現我的成語有什麼不對嗎?
您可以使用'doOnNext'打印每個步驟的結果嗎? – zsxwing
我可以看到代碼沒有錯,除了2.2.x之外,你並不需要最初的延遲。 –
如果你刪除'firstOrDefault'並返回一個列表,你會得到什麼?你的清單是空的嗎?也可以在'AsyncN1qlQueryResult'對象的內部查看 - 你可以在'N1qlMetrics'對象的'flatMap'中訪問關於結果的數據。 – Will