我使用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.
...
}
所以我想:
None
。我想到在运行上面的代码之后,扫描ids
输入参数以及每个没有压缩值的参数,以便为其添加一个ID值但它就像添加一样另一个流程,我希望zip能够处理现有和不存在的行。
我应该如何处理?如何让.zip
处理现有和不存在的行?
答案 0 :(得分:1)
不要使用zip()
运营商。相反,只需使用flatMap()
和materialize().take(1)
即可。 materialize()
会将onComplete()
事件转换为可以映射到Notification
的{{1}},而带有值的None
会映射到Notification
}。
Some(value)