BehaviourSubject上的distinctUntilChanged()不起作用

问题描述 投票:1回答:1

我的package.json:

  • rxjs“:”^ 5.5.6“
  • @angular:“6.0.0-beta.5

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);
    });

结果:

是的,'d','d'

工作,听,听

预期:

错,'','d'

错,'d','来自'

我可能听不懂。你能指点我正确的方向吗?

angular rxjs angular2-observables behaviorsubject
1个回答
2
投票

看起来你可能会向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比较器函数(第一次发射必然是不同的)

© www.soinside.com 2019 - 2024. All rights reserved.