RxJS验证结果是否存在

时间:2018-07-19 08:16:41

标签: rxjs

从设计和总体代码质量上,您会建议对满足某些条件的数组中结果存在的哪些检测建议?假设还可以查询空数组,并且我们希望一次访问所有满足条件的元素,那么下面的代码似乎可靠吗?

其他琐事:
*代码正在处理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运算符

1 个答案:

答案 0 :(得分:1)

您可以简化代码: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')}
)