我有2个可并行执行的Observable。我正在尝试合并2个可观察对象,但是我只能从一个可观察对象中得到结果。
Observable<AsyncN1qlQueryResult> queryResult = bucket.async().query(n1qlQuery)
.timeout(5000, TimeUnit.MILLISECONDS)
.retryWhen(anyOf(BackpressureException.class).max(3)
.delay(Delay.exponential(TimeUnit.MILLISECONDS, 32, 2)).build())
.retryWhen(anyOf(TemporaryFailureException.class)
.max(2)
.delay(Delay.fixed(500, TimeUnit.MILLISECONDS)).build())
.onErrorResumeNext(exp -> {
return Observable.error(exp);
});
Observable<Map<String, String>> metricsMap = queryResult.flatMap(qr ->
qr.info()).map(n1qlMetrics -> {
resultMap.put("metrics",n1qlMetrics.asJsonObject().toString());
return resultMap;
});
Observable<Map<String, String>> resultObsMap = queryResult.flatMap(asyncN1qlQueryResult ->
asyncN1qlQueryResult.errors().flatMap(error -> {
return Observable
.error(new Exception("unable to execute n1ql query " + error.toString()));
})
.switchIfEmpty(asyncN1qlQueryResult.rows())
).map(row -> {
JsonObject json = ((AsyncN1qlQueryRow) row).value();
return json.toString();
}).reduce("",(result,next) -> result + (result.equals("") ? "" :
",") + next).map(results -> {resultMap.put("results", results); return resultMap;});
当我运行以下内容时:
Observable<Map<String, String>> retObservable = Observable.concat(resultObsMap, metricsMap);
我只从resultObsMap得到结果。
有什么办法可以并行执行上述两个可观察结果resultObsMap和metricsMap并将它们的结果合并在一起?