Эффект NGRX «оператор редуктора rxjs» останавливает наблюдаемую цепочку - PullRequest
0 голосов
/ 29 декабря 2018

Я работаю над проектом Angular с магазином NGRX и эффектом внутри.У меня возникла проблема при использовании оператора редуктора rxjs , наблюдаемая цепочка как-то была остановлена.Ошибки не отображаются на консоли.

@Injectable()
export class MyEffects {
    @Effect()
    public grouping$: Observable<Action> = this.actions$.pipe(
        ofType(FIRST_ACTION),
        map((action) => action.payload),
        flatMap(i => i),
        groupBy((i) => i.code),
        flatMap(group$ => {
            return group$.pipe(
                reduce((acc, curr) => {
                    acc.push(curr);
                    console.log('%c curr', 'background-color:green;color:#fff', curr);
                    console.log('%c acc', 'background-color:green;color:#fff', acc);
                    return acc;
                }, []),
                tap(grpArr => console.log('group array', grpArr))
            );
        }),
        switchMap((data) => {
            return [new AnotherAction()];
        })
    );
}   

Моя проблема в линии

tap (grpArr => console.log ('group array', grpArr))

Операторы редуктора регистрируют правильный вывод в консоли.Но когда я нажимаю на результат, они не отображаются.И конечно последний оператор switchMap не сработает, так как цепочка остановлена.Я что-то здесь упускаю?

Консольный выход для оператора редуктора enter image description here

1 Ответ

0 голосов
/ 29 декабря 2018

Похоже, что вы хотите использовать scan вместо reduce, поскольку reduce будет выдавать накопленное значение только , когда его источник завершит .

Однако this.actions$ никогда не завершается, поэтому group$ никогда не завершается и, следовательно, reduce никогда ничего не излучает.

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

...