BehaviourSubject 上的 distinctUntilChanged() 不起作用
distinctUntilChanged() on BehaviourSubject don't work
我的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);
});
结果:
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 发射时调用(第一次发射必须不同)
我的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);
});
结果:
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 发射时调用(第一次发射必须不同)