仅在调用onComplete时映射scala rx observables

时间:2017-11-08 14:48:16

标签: scala rx-java rx-scala couchbase-java-api

我使用scala observables从couchbase获取项目,然后我使用map,flatMap,zip来转换结果。问题是如果一个项目在couchbase中不存在,那么例如.zip不会仅调用onComplete。例如:

import rx.lang.scala._

def getIdsWithValues(ids: Seq[String]): Map[K, V] = {
  val values = Observable.from(keyValueIds).flatMap(id => couchbaseBucket.async().get(id))
  values.zip(Observable.from(ids)) // zip is not called if no row in couchbase with id.
  ...
}

所以我想:

  1. 返回k - >的地图v
  2. 我让.zip将k连接到返回的v(如果不存在,我希望v类似于None
  3. 如果db中没有项目,我看到根本没有调用zip。
  4. 我想到在运行上面的代码之后,扫描ids输入参数以及每个没有压缩值的参数,以便为其添加一个ID值但它就像添加一样另一个流程,我希望zip能够处理现有和不存在的行。

    我应该如何处理?如何让.zip处理现有和不存在的行?

1 个答案:

答案 0 :(得分:1)

不要使用zip()运营商。相反,只需使用flatMap()materialize().take(1)即可。 materialize()会将onComplete()事件转换为可以映射到Notification的{​​{1}},而带有值的None会映射到Notification }。

Some(value)