如何组合两个组合最新



我计划做的是:

首先,我调度一个操作(get(来检索后端上的数据并将其插入实体中。

在我需要检查这是否已经加载以及是否有值之后​​在盲人中,如果有价值,我会删除整个银行。

在第二个步骤中,我检查get()是否已加载,以及存储实体中是否有ID,如果没有,我将创建一个新的数据库。

我这样做是因为如果我不刷新,数据库就会被填充,但实体是空的,所以会"窃听"系统。

下面发生的情况是,如果我以这种方式保留两个组合器,它们都不会被触发,如果我移除组合器,它就会被正确触发。

如何根据正确的条件激活两者,并在组件损坏时完成

combineLatest([this.peopleSelectorsService.loading, this.peopleSelectorsService.allIds])
.pipe(skipWhile((observables) => observables[0] || observables[1].length === 0))
.subscribe((observables) => {
console.log('entrou 1');
const peopleIds = observables[1];
this.peopleDispatchService.deleteAll(peopleIds as Array<string>);
});
combineLatest([this.peopleSelectorsService.loading, this.peopleSelectorsService.allIds])
.pipe(skipWhile((observables) => observables[0] || observables[1].length !== 5))
.subscribe(() => {
console.log('entrou 2');
this.peopleDispatchService.createAll([
{ id: '0', isMain: true, name: 'THIAGO DE BONIS CARVALHO SAAD SAUD', avatar: 'assets/users/thiagobonis.jpg', messages: null },
{ id: '1', isMain: false, name: 'BILL GATES', avatar: 'assets/users/billgates.jpg', messages: null },
{ id: '2', isMain: false, name: 'STEVE JOBS', avatar: 'assets/users/stevejobs.jpg', messages: null },
{ id: '3', isMain: false, name: 'LINUS TORVALDS', avatar: 'assets/users/linustorvalds.jpg', messages: null },
{ id: '4', isMain: false, name: 'EDSGER DIJKSTRA', avatar: 'assets/users/dijkstra.jpg', messages: null },
]);
});

组件中的这种逻辑感觉有点奇怪。我建议将其放入效果文件中,因为这确实是服务调用的副作用。然而,为了回答你的问题,这里是我能想到的最好的。请记住,我可能完全误解了你的问题。

unscubscribe$ = new Subject<boolean>();
combineLatest([this.peopleSelectorsService.loading, 
this.peopleSelectorsService.allIds])
.pipe(
filter((observables) => !observables[0]), // dont do anything when loading
takeUntil(unscubscribe$), // destroys the observable
.subscribe((observables) => {
if(observables[1] && observables[1].length === 0) { //your first scenario
console.log('entrou 1');
const peopleIds = observables[1];
this.peopleDispatchService.deleteAll(peopleIds as Array<string>);            
} else if(observables[1] && observables[1].length !== 5) { //your second scenario
this.peopleDispatchService.createAll([
{ id: '0', isMain: true, name: 'THIAGO DE BONIS CARVALHO SAAD SAUD', avatar: 'assets/users/thiagobonis.jpg', messages: null },
{ id: '1', isMain: false, name: 'BILL GATES', avatar: 'assets/users/billgates.jpg', messages: null },
{ id: '2', isMain: false, name: 'STEVE JOBS', avatar: 'assets/users/stevejobs.jpg', messages: null },
{ id: '3', isMain: false, name: 'LINUS TORVALDS', avatar: 'assets/users/linustorvalds.jpg', messages: null },
{ id: '4', isMain: false, name: 'EDSGER DIJKSTRA', avatar: 'assets/users/dijkstra.jpg', messages: null },
]);
}
});
ngOnDestroy() {
//triggers the unsubscription
this.unscubscribe$(true);
this.unscubscribe$.unsubscribe();
}

最新更新