我的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);
});
结果:
是的,' d',' d'
是的,' da',' da'
预期:
错,' ',' d'
错误,' d',' da'
我可能不了解某些事情。你能指点我正确的方向吗?
答案 0 :(得分: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比较器函数(第一次发射必然是不同的)