RxJS合并流并使用两者的值来调用第三个
我有一个Angular 2应用程序,其中有一个带有返回Observable的getAlgemeneInfo()方法的'AlgemeneInfoService'。RxJS合并流并使用两者的值来调用第三个
使用angular-redux/store,我有一个商店里有一个'Dossier'和'Verpleegperiode'对象,它们都有一个Id,AlgemeneInfoService用来获取'AlgemeneInfo'对象。 (该VerpleegperiodeId可以为null)
我试图把ActiveAlgemeneInfo,应通过调用AlgemeneInfoService被刷新时的任何档案或Verpleegperiode改变状态 - 对象,在国家的对象。
我的计划是使用处理这些订阅和有一个方法getActiveAlgemeneInfo(返回“selectedAlgemeneInfo”,它被设置在订购的ActiveAlgemeneInfo状态对象的ActiveAlgemeneInfoService):
@select(state => state.dieet.activeAlgemeneInfo)
private activeAlgemeneInfo$: Observable<AlgemeneInfo>;
在构造服务的,我设置订阅:
Observable.combineLatest(
this.activeInfohosVerpleegperiode$,
this.activeInfohosDossier$
)
.distinctUntilChanged()
.subscribe(([v, d]) => {
const verpleegperiodeId = v != null ? v.verpleegperiodeId : null;
const dossierId = d.dossierId;
console.log(`vp id: ${verpleegperiodeId} - d id: ${dossierId}`);
this._setActiveAlgemeneInfo(dossierId, verpleegperiodeId);
});
this.activeAlgemeneInfo$.subscribe(algemeneInfo => this.selectedAlgemeneInfo = algemeneInfo);
而且在服务上,我也得到了一个方法:
private _setActiveAlgemeneInfo = (dossierId: number, verpleegperiodeId: number) => {
this._algemeneInfoService
.getAlgemeneInfo(dossierId, verpleegperiodeId)
.subscribe(algemeneInfo => this._dieetActions.selectAlgemeneInfo(algemeneInfo));
}
当服务被构造和方法getActiveAlgemeneInfo()被调用:
public getActiveAlgemeneInfo =(): Observable<AlgemeneInfo> => {
return this.activeAlgemeneInfo$;
}
它只是修建垃圾http请求,而当我CONSOLE.LOG的Observable.combineLatest()时,档案和Verpleegperiode是与之前的请求完全一样。
我该如何得到这个工作?
你应该移动distinctUntilChanged
- 因为它不会做“深”比较,它只是比较基准 - 和combineLatest
这将永远是一个新的数组。
请尝试以下,看看是否与你的问题,有助于:
Observable.combineLatest(
this.activeInfohosVerpleegperiode$.distinctUntilChanged(),
this.activeInfohosDossier$.distinctUntilChanged()
)
.subscribe(([v, d]) => {
另外,您应该提供一个比较法,做执行深比较像这样:
Observable.combineLatest(
this.activeInfohosVerpleegperiode$,
this.activeInfohosDossier$
)
.distinctUntilChanged(_.isEqual) // from: https://lodash.com/docs/#isEqual
.subscribe(([v, d]) => {