合并/合并两个可观察对象只能得到一个结果

时间:2020-05-27 23:01:46

标签: java observable rx-java rx-java2

我有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并将它们的结果合并在一起?

0 个答案:

没有答案
相关问题