BehaviourSubject 上的 distinctUntilChanged() 不起作用

distinctUntilChanged() on BehaviourSubject don't work

我的package.json:

searchTextValueSubject 是一个 BehaviorSubject

import { debounceTime } from 'rxjs/operators';
import { distinctUntilChanged } from 'rxjs/operators';
import { pipe } from 'rxjs';

this.sharingVariableService
    .searchTextValueSubject
    .pipe(
        distinctUntilChanged((x, y) => {
            console.log(y.BarCodeS === x.BarCodeS);
            console.log(y.BarCodeS);
            console.log(x.BarCodeS);
            return y.BarCodeS === x.BarCodeS
        })
    )
    .subscribe((searchTextValue) => {
        this.searchTextValue = searchTextValue;
        this.getRessourceHardware(this.serverDataRessourceHardware._meta.max_results, this.searchTextValue);
    });

结果:

true, 'd', 'd'

true, 'da', 'da'

预期:

False, ' ', 'd'

False, 'd', 'da'

我可能有点不明白。你能给我指出正确的方向吗?

您可能正在向 searchTextValueSubject 发送变异值。

确保您的代码没有做这样的事情...

let value = {BarCodeS: 'd'}
this.sharingVariableService.searchTextValueSubject.next(value);

value.BarCodeS = 'da'; // wrong!
this.sharingVariableService.searchTextValueSubject.next(value);

正确的做法是这样的:

const value0 = {BarCodeS: 'd'}
this.sharingVariableService.searchTextValueSubject.next(value0);

const value1 = {...value0, BarCodeS: 'da'}; // right
this.sharingVariableService.searchTextValueSubject.next(value1);

另请注意,distinctUntilChanged 比较器函数永远不会在 first 发射时调用(第一次发射必须不同)