我的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'
工作,听,听
预期:
错,'','d'
错,'d','来自'
我可能听不懂。你能指点我正确的方向吗?
看起来你可能会向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比较器函数(第一次发射必然是不同的)