Как совместить два комбайнаПоследний? - PullRequest
1 голос
/ 25 апреля 2020

Я планирую сделать следующее:

Первый I отправить действие (получить) , чтобы извлечь данные из внутреннего интерфейса и вставить их в сущности.

Сразу после того, как мне нужно проверить, было ли это загружено и есть ли значения в блайнде, и если есть значение, я удаляю весь банк.

И во втором я проверяю, если get() был загружен, и если в сущности хранилища есть идентификаторы, а если нет, я создаю новую базу данных.

Я делаю это, потому что если я не отражаю sh, база данных заполнена, но сущности пусты, поэтому «глючит» система.

Что происходит ниже, так это то, что если я оставлю два сумматора таким образом, ни одна из них не сработает, если я удалю сумматор, он сработает правильно.

Как активировать как в соответствии с правильным условием, так и по окончании sh при уничтожении компонента?

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 },
            ]);
        });

1 Ответ

1 голос
/ 30 апреля 2020

Этот вид логики c в компоненте кажется немного странным. Я бы предложил добавить его в файл эффектов, так как это действительно побочный эффект при вызовах сервисов. Однако, чтобы ответить на ваш вопрос, вот лучшее, что я мог придумать. Пожалуйста, имейте в виду, что я, возможно, совершенно не понял ваш вопрос.

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();
}
...