RxJS验证结果的存在性

RxJS验证结果的存在性,rxjs,Rxjs,从设计和总体代码质量来看,您建议对满足某些标准的数组中存在的结果进行哪些检测?假设也可以查询空数组,并且我们希望能够同时访问满足条件的所有元素,那么下面的代码看起来可靠吗 其他琐事: *代码正在处理HTTP请求,所以它保证这个可观察的将完成 Rx.Observable.from([] /*or [1,2,3], or [1,2,50]*/) .filter(v => v > 20) .toArray() .filter(a => a.length > 0) .defaul

从设计和总体代码质量来看,您建议对满足某些标准的数组中存在的结果进行哪些检测?假设也可以查询空数组,并且我们希望能够同时访问满足条件的所有元素,那么下面的代码看起来可靠吗

其他琐事:
*代码正在处理HTTP请求,所以它保证这个可观察的将完成

Rx.Observable.from([] /*or [1,2,3], or [1,2,50]*/)
.filter(v => v > 20)
.toArray()
.filter(a => a.length > 0)
.defaultIfEmpty([])
.subscribe(v => {
  if (v.length === 0) {console.log('no results')}
  else { console.log('Results present', v) }
}, (e) => {console.log(e)}, () => {console.log('done')})
--编辑--

第二次调用
filter
是必要的,因为空数组
[]
可以成功绕过
defaultIfEmpty
操作符您可以简化cour代码:
toArray
在可观察到的结束时返回空列表,即使没有收到任何元素

Rx.Observable.from([] /*or [1,2,3], or [1,2,50]*/)
.filter(v => v > 20)
.toArray() // will return [] when the observable finishes and filter discards all your elements 
.subscribe(v => {
  if (v.length === 0) {console.log('no results')}
  else { console.log('Results present', v) }
  }, (e) => {console.log(e)}, () => {console.log('done')}
)

为什么不删除第二个过滤器和defaultIfEmpty?如果您确定源Observable迟早会完成,并且它异步发出事件,那么这种方法是有意义的。如果源可观测对象只在整个阵列中发射一次,那么您最好对阵列进行过滤。@Picci
过滤器
操作符是否自行处理整个阵列和其他可观测对象?或者我应该在谓词中实现一些forEach@TamasHegedus哦,你为什么不把它作为答案发布呢?:)我很乐意说出我想说的话如下。如果您有一个可观测的源,例如每100毫秒发射一个值,并且您确信它将在一定数量的发射后完成,那么您的
过滤方法
(正如@madjaoue所建议的,只有一个
过滤器
),然后
到阵列
工作。如果源Observable在一个数组中只发射一次,那么您应该在Observable的
映射
操作符中使用数组的
过滤器
方法。如果这还不清楚,我可以给出更多的细节和答案。这很有道理!