我有一个值流,我使用下限和上限来限制这些值,为了减少日志记录量,我只想在值发生变化时发出值。问题是以下代码段中的第二个 distinctUntilChanged()
仍然会产生重复项:
Observable // emits i.e. [2, 2, 2, 5, 5, 10, 20]
.distinctUntilChanged() // becomes [2, 5, 10, 20]
.map(target => {
const correctedTarget = Math.min(Math.max(target, MINIMUM), MAXIMUM); // Let's say min: 5, max: 10
if(correctedTarget != target) {
logger.warn(`Prediction wants to scale out-of-bounds to ${target}, limiting to ${correctedTarget}`);
}
return correctedTarget;
}) // becomes [5, 5, 10, 10]
.distinctUntilChanged() // should be [5, 10], but is [5, 5, 10, 10]
RxJs 文档声明过滤器默认为简单的相等比较,所以我希望这应该是 Just Work™。
最佳答案
我的一位同事(再次)发现了这个问题(也感谢 Matt 的帮助)。事实证明,最初的假设是错误的——代码大纲如下:
Observable // emits credentials on some interval
.flatmap(credentials => {
return Observable2.doSomething()
.distinctUntilChanged()
...
})
如您所见,
distinctUntilChanged
被链接到 Observable2
,每次发出凭据时,它都是一个新的可观察流。这也解释了为什么我制作的比较器函数根本没有被调用:每次只有一个值,所以没有什么可比较的。关于javascript - RxJs:distinctUntilChanged 仍然发出重复值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38699020/