为什么一些RxJS 6操作符使用谓词和投影/选择器?
这是一个关于RxJS 6设计的问题。以两个算符为例,为什么一些RxJS 6操作符使用谓词和投影/选择器?,rxjs,Rxjs,这是一个关于RxJS 6设计的问题。以两个算符为例, 将投影或选择器(在文档的不同区域由不同名称调用)作为可选参数,即从输入可观测值映射到返回可观测值类型的函数 大概,combinelateest([as,bs],f)与combinelateest([as,bs]).pipe(map(f))相同 将一个谓词作为(可选)参数,该谓词可用于从源可观察对象中筛选值 大概,source.pipe(last(p))与source.pipe(filter(p),last())相同^一, 考虑到这些等价性
combinelateest([as,bs],f)
与combinelateest([as,bs]).pipe(map(f))相同
source.pipe(last(p))
与source.pipe(filter(p),last())
相同^一,
last
将可观察到的源传递给谓词,但filter
不传递。大多数谓词都不需要该参数,少数使用该参数的谓词可以使用一些管道体操:
source.pipe(src => {
const p2 = (value, index) => p(value, index, src)
return filter(p2)(src)
})
周围有些人参与了Rxjs V6 API的设计。它们可以补充这个答案
我猜
combineLatest([as,bs],f)
比combinelateest([as,bs]).pipe(map(f))具有性能优势。这至少是RXJSV4中的基本原理。在v6中可能会继续如此<代码>管道
通过直接传递谓词引入了您没有的间接级别,这可能会导致性能降低。类似地,obs.pipe(f,g)
的性能应该低于obs.pipe(x=>g(f(x))
。与往常一样,在绩效方面,衡量就是一切,这将是你在完成所有其他工作后想要做的一种微观优化。现在我已经回答了你的问题,我还需要提醒你,因此,请尽量远离那些答案基于观点的问题,原因显而易见。你的问题很快就结束了,这并不奇怪。RXjs有一个可以自由提出此类问题的平台。结果选择器在RxJS 6中已经被弃用,并将在RxJS 7中删除。原因如下所述