在rxjs流中,我将distinctUntilChanged
与lodash的isEqual
一起使用以过滤出重复的值。但是,它似乎无法正常工作。采取以下代码段
import { isEqual } from 'lodash-es';
let cachedValue: any;
function testFn(observableVal: Observable<any>) {
return observableVal
.pipe(
distinctUntilChanged(isEqual),
tap(val => {
const equal = isEqual(cachedValue, val);
console.log('"output":', equal, cachedValue, val);
cachedValue = val;
})
)
}
在此示例中,我希望const equal
函数内的tap
永远不会=== true
。我希望distinctUntilChanged(isEqual)
会过滤掉isEqual(cachedValue, val) === true
->总是const equal === false
的所有值。但是,控制台输出显示:
"output": false undefined [ContactList]
"output": true [ContactList] [ContactList]
"output": true [ContactList] [ContactList]
"output": true [ContactList] [ContactList]
我是否误解了distinctUntilChanged()
运算符的工作原理?我发布了一个简化的示例,因为实际的rxjs流非常复杂,但是我不希望这种复杂性对{{1}中的const equal
应该始终=== false
产生任何影响}运算符。
我只是想了解发生了什么,因此感谢所有信息。谢谢!
应该注意,如果我将代码更改为:
tap
然后过滤将按预期进行。 I was under the impression that distinctUntilChanged(isEqual)
was equivalent to:
function testFn(observableVal: Observable<any>) {
return observableVal
.pipe(
filter(val => {
const equal = isEqual(cachedValue, val);
cachedValue = val;
return !equal;
}),
tap(val => {
console.log('"output":', val);
})
)
}
我是否误解/误解了distinctUntilChanged
运算符?